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)
我可以用这个代码绘制矩形,当我从它的起点向后移动鼠标时,矩形应该是翻转的,但不是这样做,我的矩形继续沿着鼠标光标的相反方向绘制.简而言之,此代码在向前绘制矩形时工作正常,但不适用于向后方向.
正如Jamiec提到,只需调用Invalidate中MouseMove的处理程序,并做图中的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)
| 归档时间: |
|
| 查看次数: |
11188 次 |
| 最近记录: |