由于控件数量很多,窗体重绘时控件闪烁如何解决 做的一个窗体,包含了上百个Label/textbox等控件,每次重绘时空间闪烁的很厉害搜索了一下,看到介绍GDI+的双缓冲技术可以解决绘图闪烁的问题,那么控件的重绘如何解决呢?请指教,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); this.UpdateStyles(); 我之前已经把这段代码加到form_load里,似乎没有什么效果…… this.SuppendLayout();//绘制this.ResumeLayout();这样试试? 可能是我表达的不清楚吧我写了一个类继承userControl,在里面放了很多label/textbox控件,然后放到窗体里。这样在窗口重绘的时候,明显能看到屏幕从下到上控件依次变白然后显示出来。然后我测试了一下,即使只是在一个普通的WINFORM程序里,在窗体上放置较多的空间也会出现这个问题。因为用VC就没这种情况,我怀疑是C#的绘图效率比较慢。即使我在FORM的构造函数里加上设置双缓冲的SetStyle也没什么用。先谢谢楼上2位 记得ListBox类中有一对BeginUpdate和EndUpdate这个方法,窗体是不是也有这样的一个方法用来解决抖动现象。 VS.NET 2005中的C#入门教学包中有一个“带有RSS的屏幕保护程序”,使用GDI+写的,很有参考意义。我没有仔细看,但其中有关于双缓冲的和控制文字清晰的。我回去看看,正好自己也想学学:)PS:做GUI很费尽的~ 我也碰到同样的问题:我是用一个picturebox作为背景,前景也用好多picturebox,一开始就几个前景控件根本看不出来,于是我傻乎乎地就把工程完工。结果试用时,有时会同时载入近百个小图片,那个刷新过程,我的p4 2.6+1GRAM+9100显卡都那个慢啊,真不知道到用户的老爷机上会是什么效果……期待解决 我是做一个类似CAD的画图软件,也用过上面的双缓冲设置,感觉一点用也没有 到底有无人真的解决过这个问题啊,都是想当然的说双缓冲,setStyle。设置了SetStyle一点作用不起嘛 能否出手看下,SetStyle真的不行,请真的试下。 楼主参看 :http://community.csdn.net/Expert/TopicView3.asp?id=4794615 我的意见是上缓冲, this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); this.UpdateStyles();加bitmap、也就是说,将你的所有东西都画一张bitmap上,然后在贴倒窗体上,(都在Paint事件中处理)在外部调用的时候用Invalidata()进行重绘。 怪事!!MdiParent引发的bug??? c#中如何辨别当前字节是左半部分字节还是右半部分字节? C#中用 SOCKET 传送结构体的问题 请教一个进制转换的问题 急用!C#取中文字的拼音首字母 求一个算法就是判断一个3位数的最后一位是奇数还是偶数 在c#中如何编写程序使用外部方法,来控制扬声器发声??? 在线高分求助:怎样动态改变HTML下的TABLE的行和列 问问题哈,要怎么得到一个datagrid中的textbox数据? DNA 比對,讓 C# 認祖歸宗 测试代码 如何实现移动到Label范围内就弹出窗口,离开Label窗口就消失??
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles();
//绘制
this.ResumeLayout();
这样试试?
PS:做GUI很费尽的~
期待解决
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles();
加bitmap、也就是说,将你的所有东西都画一张bitmap上,然后在贴倒窗体上,(都在Paint事件中处理)
在外部调用的时候用Invalidata()进行重绘。