用鼠标绘制矩形

Far*_*man 2 c# drawing winforms

有没有办法用起点和终点绘制矩形而不是起点和面积?我使用以下代码,通过鼠标在窗体上绘制矩形:

    System.Drawing.Graphics formGraphics;
    bool isDown = false;
    int initialX;
    int initialY;

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        isDown = true;
        initialX = e.X;
        initialY = e.Y;
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (isDown == true)
        {
            this.Refresh();
            Pen drwaPen = new Pen(Color.Navy,1);
            int width = e.X - initialX, height = e.Y - initialY;
            //if (Math.Sign (width) == -1) width = width 
            //Rectangle rect = new Rectangle(initialPt.X, initialPt.Y, Cursor.Position.X - initialPt.X, Cursor.Position.Y - initialPt.Y);
            Rectangle rect = new Rectangle(initialX, initialY, width * Math.Sign(width), height * Math.Sign(height));

            formGraphics = this.CreateGraphics();
            formGraphics.DrawRectangle(drwaPen, rect);
        }
    }
    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        isDown = false;
    }
Run Code Online (Sandbox Code Playgroud)

我可以用这个代码绘制矩形,当我从它的起点向后移动鼠标时,矩形应该是翻转的,但不是这样做,我的矩形继续沿着鼠标光标的相反方向绘制.简而言之,此代码在向前绘制矩形时工作正常,但不适用于向后方向.

Mar*_*ath 7

正如Jamiec提到,只需调用InvalidateMouseMove的处理程序,并做图中的OnPaint方法/ Paint事件处理程序

要向前或向后绘制正确的矩形,请尝试以下操作:

Rectangle rect = new Rectangle(Math.Min(e.X, initialX), 
                               Math.Min(e.Y, initialY), 
                               Math.Abs(e.X - initialX), 
                               Math.Abs(e.Y - initialY));
Run Code Online (Sandbox Code Playgroud)