在Form上直接画图。
在OnPaint里做如下工作:DrawImage画背景图,再用DrawRectangle等画矢量图。现在需要如下效果:
在画一个矩形过程中,移动鼠标时,动态显示当前矩形范围。即在MouseMove中响应。如果只是画图,因为移动事件不断发生,会画出很多个矩形。
于是在MouseMove代码中首先this,Invalidate(),再DrawRectangle,则清除了上次DrawRectangle画的矩形。可是这样的话,在鼠标移动过程中会有闪烁现象。另外,当鼠标移动停止时,新画的矩形就马上消失了。Form的doublebuffer设为true也还这样。有没有简单的解决办法?

解决方案 »

  1.   

    用双缓冲画图
    在C# 里好像里要 把 Form的 DoubleBuffered = true就可以了
      

  2.   

    将图片画到picturebox上,应该就可以了
      

  3.   

    已经double buffer了,还是不太理想。
      

  4.   

    使用control.setstyle方法,将指定对象设定为指定值,参数有两个,第一个十controlstyle枚举,当controlstyle为斗blebuffer时,就可以实现控件重绘引起的闪烁。
      在这之前先是userPaint和allpaintingInWmpaint为true。
    具体的看msdn,上面有,查control.setstyle
      

  5.   

    3楼说的用picturebox应该是可以可以的.
    把所有的绘图放在一个picturebox里面绘制,
    不要直接再在form里面绘
      

  6.   

     SetStyle(ControlStyles.UserPaint, true);
                SetStyle(ControlStyles.ResizeRedraw, true);
                SetStyle(ControlStyles.AllPaintingInWmPaint, true);
                SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
                SetStyle(ControlStyles.Selectable, true);
      

  7.   

    已解決,將invalidate()換成refresh()就好了.