当前位置: 代码迷 >> .NET组件控件 >> 界面上有1600个自动创建的控件,form用了双缓存,但还是闪烁,该怎么处理
  详细解决方案

界面上有1600个自动创建的控件,form用了双缓存,但还是闪烁,该怎么处理

热度:4935   发布时间:2013-02-25 00:00:00.0
界面上有1600个自动创建的控件,form用了双缓存,但还是闪烁
有个winform界面,我在一个panel上自动创建了1600个label控件,界面刚show出的时候,或者先点其他程序,再点此页面时,此winform界面有重新刷新的过程。我在winform的构造函数里加了如下语句,但不管用,各位有无碰过类似问题?

SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);

我的开发环境是:vs2008,c#,xp

------解决方案--------------------------------------------------------
顶 这个标题我看了半天 1600个 牛!!
------解决方案--------------------------------------------------------
将多个控件添加到父控件时,建议在初始化要添加的控件之前调用 SuspendLayout 方法。将控件添加到父控件之后,调用 ResumeLayout 方法。这样就可以提高带有许多控件的应用程序的性能。

------解决方案--------------------------------------------------------
.net 都这样的, 不闪就不是 .net 了
------解决方案--------------------------------------------------------
自己绘制吧,用GDI+自己绘制吧,这样闪烁可能会比你用控件好些。
------解决方案--------------------------------------------------------
帮忙顶下.正在处理有关的图形开发....从来没有接触过的哈.
------解决方案--------------------------------------------------------
探讨
真的需要这么多,不忽悠。是个工控系统,每个控件代表了个每个设备的状态,根据状态显示颜色......

------解决方案--------------------------------------------------------
太强大了,这么多控件
------解决方案--------------------------------------------------------

------解决方案--------------------------------------------------------
探讨
自己绘制吧,用GDI+自己绘制吧,这样闪烁可能会比你用控件好些。

------解决方案--------------------------------------------------------
将多个控件添加到父控件时,建议在初始化要添加的控件之前调用 SuspendLayout 方法。将控件添加到父控件之后,调用 ResumeLayout 方法。这样就可以提高带有许多控件的应用程序的性能。 

同意
------解决方案--------------------------------------------------------
GDI+没有更好的办法了
------解决方案--------------------------------------------------------
强人...
------解决方案--------------------------------------------------------
是自动在代码中添加的还是VS自动生成那样添加的?
------解决方案--------------------------------------------------------
用updatepanel
------解决方案--------------------------------------------------------
这么多....
------解决方案--------------------------------------------------------
窗体的双缓冲对其子控件是不起作用的。
------解决方案--------------------------------------------------------
楼主真强,1600个啊。太厉害咯
------解决方案--------------------------------------------------------
有点儿疯狂哦,C#解决这样的问题属实有点儿困难啊
楼上有两位仁兄推荐使用GDI+自己绘制,支持一下,这恐怕是唯一的解决办法了吧
------解决方案--------------------------------------------------------
在构造函数中加this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true); 这句话不行嘛
------解决方案--------------------------------------------------------
超过100个控件就自己画吧,不是自己GDI+吧
------解决方案--------------------------------------------------------
PANEL 替换,在隐藏的PANEL上绘完后,替换当前的PANEL
------解决方案--------------------------------------------------------
最简单的方法,先把Panel隐藏起来,然后都加载完了,数据填充好了,再显示Panel会好很多
------解决方案--------------------------------------------------------
曾遇到LZ同样的问题.
后用flash来做界面.效果很好.
------解决方案--------------------------------------------------------
嵌个web算了
------解决方案--------------------------------------------------------
个人认为这样的需求还是用自定义控件。从Control继承,创建一个集合,自己定义个对象保存你那些什么文本呀,颜色呀,其实就是替代Label,
然后按你需要的排列方式循环画出来。
防止闪烁的方法是只重画需要重画的区域
最好在你的Label对象中提供属性保持它自己的位置,这样当那个Label属性改变的时候你只需要重画那一小块,这样就不闪烁了。
  相关解决方案