本帖最后由 josxhn 于 2010-07-15 21:30:32 编辑

解决方案 »

  1.   


    那要怎么解决呢?为什么迅雷,office,资源管理器,等等应用软件都不会有这种现象?
      

  2.   

    拖放时用ControlPaint.DrawRev..rectange绘制矩形.拖放完毕后才正式重新绘制界面.
      

  3.   


    能否简述下实现步骤,比如事件在哪,绘制矩形主要过程,重绘界面是手写还是调.net库函数
      

  4.   

    1、 在内存中建立一块“虚拟画布”:
    Bitmap bmp = new Bitmap(600, 600);
    2、 获取这块内存画布的Graphics引用:
    Graphics g = Graphics.FromImage(bmp);
    3、 在这块内存画布上绘图:
    g.FillEllipse(brush, i * 10, j * 10, 10, 10);
    4、将内存画布画到窗口中
    this.CreateGraphics().DrawImage(bmp, 0, 0);
    _________________________________
    以上是双缓冲重绘方法。
    想问第三步放到我的程序中,在内存画布中绘制控件,应该是怎么样的做法呢?
      

  5.   

    导致画面闪烁的关键原因分析:
          一、绘制窗口由于大小位置状态改变进行重绘操作时
         绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面重新刷新一次以维持窗口正常显示。刷新过程中会导致所有图元重新绘制,而各个图元的重绘操作并不会导致Paint事件发生,因此窗口的每一次刷新只会调用Paint事件一次。窗口刷新一次的过程中,每一个图元的重绘都会立即显示到窗口,因此整个窗口中,只要是图元所在的位置,都在刷新,而刷新的时间是有差别的,闪烁现象自然会出现。
         所以说,此时导致窗口闪烁现象的关键因素并不在于Paint事件调用的次数多少,而在于各个图元的重绘。
         根据以上分析可知,当图元数目不多时,窗口刷新的位置也不多,窗口闪烁效果并不严重;当图元数目较多时,绘图窗口进行重绘的图元数量增加,绘图窗口每一次刷新都会导致较多的图元重新绘制,窗口的较多位置都在刷新,闪烁现象自然就会越来越严重。特别是图元比较大绘制时间比较长时,闪烁问题会更加严重,因为时间延迟会更长。
         解决上述问题的关键在于:窗口刷新一次的过程中,让所有图元同时显示到窗口。
          二、进行鼠标跟踪绘制操作或者对图元进行变形操作时
         当进行鼠标跟踪绘制操作或者对图元进行变形操作时,Paint事件会频繁发生,这会使窗口的刷新次数大大增加。虽然窗口刷新一次的过程中所有图元同时显示到窗口,但也会有时间延迟,因为此时窗口刷新的时间间隔远小于图元每一次显示到窗口所用的时间。因此闪烁现象并不能完全消除!
         所以说,此时导致窗口闪烁现象的关键因素在于Paint事件发生的次数多少。
         解决此问题的关键在于:设置窗体或控件的几个关键属性。http://www.cnblogs.com/bnuvincent/archive/2009/08/04/1538484.html
    http://all.zcom.com/mag2/gongyejishu/jisuanji/24099/200510/6870048/