做的一个窗体,包含了上百个Label/textbox等控件,每次重绘时空间闪烁的很厉害
搜索了一下,看到介绍GDI+的双缓冲技术可以解决绘图闪烁的问题,那么控件的重绘如何解决呢?
请指教,谢谢

解决方案 »

  1.   


       this.SetStyle(ControlStyles.DoubleBuffer | 
          ControlStyles.UserPaint | 
          ControlStyles.AllPaintingInWmPaint,
          true);
       this.UpdateStyles();
      

  2.   

    我之前已经把这段代码加到form_load里,似乎没有什么效果……
      

  3.   

    this.SuppendLayout();
    //绘制
    this.ResumeLayout();
    这样试试?
      

  4.   

    可能是我表达的不清楚吧我写了一个类继承userControl,在里面放了很多label/textbox控件,然后放到窗体里。这样在窗口重绘的时候,明显能看到屏幕从下到上控件依次变白然后显示出来。然后我测试了一下,即使只是在一个普通的WINFORM程序里,在窗体上放置较多的空间也会出现这个问题。因为用VC就没这种情况,我怀疑是C#的绘图效率比较慢。即使我在FORM的构造函数里加上设置双缓冲的SetStyle也没什么用。先谢谢楼上2位
      

  5.   

    记得ListBox类中有一对BeginUpdate和EndUpdate这个方法,窗体是不是也有这样的一个方法用来解决抖动现象。
      

  6.   

    VS.NET 2005中的C#入门教学包中有一个“带有RSS的屏幕保护程序”,使用GDI+写的,很有参考意义。我没有仔细看,但其中有关于双缓冲的和控制文字清晰的。我回去看看,正好自己也想学学:)
    PS:做GUI很费尽的~
      

  7.   

    我也碰到同样的问题:我是用一个picturebox作为背景,前景也用好多picturebox,一开始就几个前景控件根本看不出来,于是我傻乎乎地就把工程完工。结果试用时,有时会同时载入近百个小图片,那个刷新过程,我的p4 2.6+1GRAM+9100显卡都那个慢啊,真不知道到用户的老爷机上会是什么效果……
    期待解决
      

  8.   

    我是做一个类似CAD的画图软件,也用过上面的双缓冲设置,感觉一点用也没有
      

  9.   

    到底有无人真的解决过这个问题啊,都是想当然的说双缓冲,setStyle。设置了SetStyle一点作用不起嘛
      

  10.   

    能否出手看下,SetStyle真的不行,请真的试下。
      

  11.   

    楼主参看 :http://community.csdn.net/Expert/TopicView3.asp?id=4794615
      

  12.   

    我的意见是上缓冲,
       this.SetStyle(ControlStyles.DoubleBuffer | 
          ControlStyles.UserPaint | 
          ControlStyles.AllPaintingInWmPaint,
          true);
       this.UpdateStyles();
    加bitmap、也就是说,将你的所有东西都画一张bitmap上,然后在贴倒窗体上,(都在Paint事件中处理)
    在外部调用的时候用Invalidata()进行重绘。