最近由于软件需要做了一个虚拟键盘,于是使用了大概100多按钮控件,但是在SHOW时控件老是闪耀,使用双缓冲也不能解决问题!!用VB做了一个虚拟键盘控件在C#使用反而不闪(!#$#^%$^&%&),到底要如何做才能在winform遇到大量使用控件是界面不闪耀?//传说中的方法(不过依然闪耀)
            SetStyle(ControlStyles.ResizeRedraw, true);
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            this.SetStyle(ControlStyles.UserPaint, true);
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.UpdateStyles();

解决方案 »

  1.   

    楼主为何不先搜索下呢
    http://topic.csdn.net/t/20060601/18/4794615.html
      

  2.   

    this.SuspendLayout();  
    this.ResumeLayout(false);   用了,没什么作用!
      

  3.   

    防止闪烁的ListView显示方案
    remex 著于2007-10-5 18:01:16
    相信做Win Form程序的朋友们一定遇到过在ListView中插入数据时,界面上一直在闪烁,而且速度很慢的情况吧。究其原因,还是在Windows消息机制没有使用好的原因。
      

  4.   

    防止闪烁的ListView显示方案这个我看过!!还在codeproject里面也找到过类似的,不过没有解决N多控件SHOW时出现波浪闪耀的问题!!
      

  5.   

    液晶显示器,你用什么技术也根治不了.Net的闪烁,只能减轻。换成普通显示器,随便用个双缓就Ok...==================================================================
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    优惠接单开发,组件控件定制开发,成品源代码批发
    联系方式:Q66840199  全天在线
    ==================================================================
      

  6.   

    控件较多时无论如何是会闪烁的,不如用画的,画再多的按钮也不会闪烁,只要处理好region就可以控制了
      

  7.   

    y1g1y1 你说的是个办法!!但是比较麻烦,如果可以使用100个按钮控件,速度不是太慢而且不刷屏为什么要用绘制呢?
      

  8.   

    那为什么VB N(N>>100)多控件不闪(相对于C#)?
      

  9.   

    是不是重绘的问题,以前是遇到对Commbox添加和删除的时候,控件在闪动。解决方法是在对Commbox数据修改的时候把空间的重绘关闭,修改完了再执行重绘。就没有闪动了。看对你有没有帮助。
      

  10.   

    100多个按钮控件自己管自己刷新,再怎么双缓存也会闪,只有自己画。至于复杂,可以有取巧的方法,自己写一个按钮控件(不能从Usecontrol继承,否则一样闪),实现绘制,处理鼠标,键盘操作。然后由一个统一控件集合进行管理,在绘制的时候保证所有的控件在同一时候刷新,就可以解决问题了
      

  11.   

    Dionix 关于自定义控件方面的资源能否给点!这方面没有经验!
      

  12.   

    资源手头也没有,我的意思是如果你觉得在1个窗口上画100多个矩形,处理鼠标消息太麻烦的话,你可以实现一个画矩形,处理键盘,鼠标消息,提供事件的类(Graphic对象,消息句柄就使用父容器的,可以在创建的时候得到,这样就等同于一个控件),然后由一个统一的集合类管理,在父容器的Panit事件中统一刷新不能每个控件自己接收Paint消息,自己刷新 ,这样控件多了必定会闪的。
      

  13.   

    Dionix 有没有类时例子!!
      

  14.   

    设置双缓冲只是对控件本身的绘制起作用,而对其所有的子控件及父控件不产生任何影响。这就像个大会堂,每个人都在说话,声音会非常乱,只有一个人说话声音就会很清晰。所以减少或消失闪的跟本解决方法只有减少控件数量,哪所这个控件占的区域非常大,但是也会由于使用了双缓冲而快速的完成操作。因此,楼主可以去掉那些“没用”的按钮或控件,而是使用一个Control,且在其Paint事件里能过Graphic来进行绘制,这样双缓冲就会起作用而没有闪的情况发生了。
      

  15.   

    hbxtlhx 能否给个简单例子!!我参考看一下!