我想我错过了 Invalidate 方法...我试图在 mousedown 的鼠标位置绘制一个正方形的左上角,然后右下角是鼠标的当前位置. 下面是在 MouseMove 事件上触发的方法。父级是一个带有pictureBox 子级的面板。(我试图在这些之上绘制。)
问题似乎与pictureBoxMain.Invalidate()
. 当注释掉代码时,代码的行为与预期一样,并绘制了无数个正方形。
[Graphicsg
是由pictureBox 创建的,因此我在pictureBox 上调用Invalidate 方法。]
当我取消注释无效行时,当鼠标移动时会绘制一个框,但一旦它停止移动,框就会消失。我无法为我的生活解决为什么。当我尝试调试代码时,似乎在鼠标不移动时正在调用 MouseMove 方法,这没有任何意义。
任何帮助是极大的赞赏!
private void pictureBoxMain_MouseMove(object sender, MouseEventArgs e)
{
if (MouseDrawLeft)
{
//Move
}
else if (MouseDrawRight)
{
MouseLast = e.Location;
if (MouseFirst != MouseLast)
{
pictureBoxMain.Invalidate();
Point bl = new Point(MouseFirst.X, MouseLast.Y);
Point tr = new Point(MouseLast.X, MouseFirst.Y);
g.DrawLine(pen, MouseFirst, tr);
g.DrawLine(pen, MouseFirst, bl);
g.DrawLine(pen, bl, MouseLast);
g.DrawLine(pen, tr, MouseLast);
}
}
}