[英]C# Graphics Invalidate
我想我很想了解Invalidate方法...我试图绘制一个正方形,正方形的左上角在mousedown处鼠标的位置,然后右下角是鼠标的当前位置。 下面是在MouseMove事件上触发的方法。 父级是带有pictureBox子级的面板。 (我试图在这些之上。)
问题似乎出在pictureBoxMain.Invalidate()
。 注释掉后,代码将按预期方式运行,并绘制出数以百计的正方形。
[Graphics g
由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);
}
}
}
每个组件(按钮,文本框,窗口...)都有其Paint方法。 Windows会定期调用此功能(例如每秒50x)以绘制对象。
您要做的是在对象上画一些东西-但是在一毫秒之内,它消失了,因为Paint方法覆盖了它。 您需要覆盖框架的Paint方法,然后在该处进行绘画-这样,您的图形将在Windows每次询问时进行绘制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.