首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-02-02 
界面上有1600个自动创建的控件,form用了双缓存,但还是闪烁有个winform界面,我在一个panel上自动创建了1600

界面上有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属性改变的时候你只需要重画那一小块,这样就不闪烁了。


我曾经处理过一个类似你这样的问题,用的就是这样的方法。

原来系统提供的Label控件肯定不适合你这样的情况,属性太多,继承太多,而且不能实现大面积的绘图控制。
像Flash这样的软件其防止闪烁的解决方案就是小区域重绘,没有变化的区域不需要重绘。
[解决办法]
太强了,如此,你只有像VS2008这样了,先启动加载form,form先隐藏,出一个正在加载的显示,加载完了,再form显示
[解决办法]
1600个label???

这软件谁用着不迷糊啊???

这需求谁做的?设计谁做的?


还是纯粹想验证C#的效率?

热点排行