日期:2014-05-17  浏览次数:20933 次

急!!!c# 如何避免子控件位置改变时造成的父控件重绘
我在mosueMove时画异或线,实现十字光标,放一个label在pictureBox上跟随鼠标移动改变位置,此时异或就不起作用了,鼠标一移动就画出来很多线,好像是每次改变label位置都触发了pictureBox的重绘,把之前的异或线也加入了背景图才导致的,哪位高手知道怎么解决吗?
C# 鼠标 label 异或 控件

------解决方案--------------------
那就不要把label放在pictureBox上。
你可以自己画pictureBox(甚至不用pictureBox)。即画完背景后,再把label文字画上去。

pictureBox.Paint += (sender, e) =>
{
   e.Graphics.DrawString("label's text here", ...);
}
------解决方案--------------------
引用:
画图操作我是写在mouseMove里的,因为鼠标移动频率比较大,要不停重绘 ……


把画线操作放到pictureBox.Paint,也就是说,在pictureBox需要重绘的时候才画,这样就不会画出N多线了。
鼠标移动时使pictureBox无效,要求重绘。如果鼠标移动时让pictureBox上面的Label移动,这也会引起pictureBox重绘,这样的话你就不需要特地让pictureBox无效,仅仅移动Label就好。
------解决方案--------------------
引用:
引用:画图操作我是写在mouseMove里的,因为鼠标移动频率比较大,要不停重绘 ……

把画线操作放到pictureBox.Paint,也就是说,在pictureBox需要重绘的时候才画,这样就不会画出N多线了。
鼠标移动时使pictureBox无效,要求重绘。如果鼠标移动时让pictureBox上面的Label移动,这也会……


在mouseMove的时候存点。在paint里重绘。这样应该可以。你label移动重绘也不会出现多条线的。如果在mouseMove的时候直接画图,必然会导致这个问题。