读书人

控件过多闪烁有关问题

发布时间: 2012-01-21 21:31:43 作者: rapoo

控件过多闪烁问题
1.窗体有背景
2.窗体上所有图片都是Label控件,并且有鼠标移动切换图片事件和点击事件
3.每页控件数目蛮多的,最少8个,多的话有30个左右
试过很多办法,其中如果窗体无背景效果不错,但是窗体一定要有背景。
如果用PictrueBox做背景,效果不错,但是Label图片内容不规则透明的地方直接显示窗体背景色,也就是说直接把背景的PictureBox的颜色给透明了,也不可以。
双缓冲的话我想不到什么好方法可以应用,内部类似
this.DoubleBuffered = true;
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
的设置也都没有效果,API "lockWindowUpdate "也不行。
希望各位大侠帮助了,小弟先谢过。


下面是我的一个测试的代码,没有做任何时间,显示窗体时闪烁的也很厉害。

public Form1()
{
InitializeComponent();
this.DoubleBuffered = true;
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
}

private void Form1_Load(object sender, EventArgs e)
{
this.Width = 1024;
this.Height = 768;
this.BackgroundImage = Image.FromFile(@ "E:\LinZhi\Image\2006116203724.6780804.jpg ");
Label[] lbl = new Label[220];
for (int i = 0; i < 220; i++)
{
lbl[i] = new Label();
lbl[i].Image = Image.FromFile(@ "E:\LinZhi\Bmp\1172423753636.jpg ");
lbl[i].Left = i % 10 * 110;
lbl[i].Top = i / 10 * (lbl[i].Height + 10);
this.Controls.Add(lbl[i]);
}
}


项目基本已经完工,希望尽量少的改动可以实现无闪烁,谢谢。
QQ:33871551 工作时都在线,希望知道怎么做的可以教下。

[解决办法]
file读一次保存到内存中看看会不会好一点.
[解决办法]
控件在界面上多了以后会闪的历害,这时设置OptimizedDoubleBuffer是没有作用的!


这个闪就是因为控件太多了,每一个控件的绘制都会消耗很多的系统资源,每当程序界面要求绘制的时候系统会依次的对每一个控件进行绘制,因为每一个都占用相当的时间,所以控件多了以后就会出现从头到尾的闪一下.

这个应该没有很好的解决方法,除非你把控件减少到一定的程序.

OptimizedDoubleBuffer只是对一个控件来说的,设置OptimizedDoubleBuffer后在这个控件上的绘制会是得到很好的效果,可是控件一多就不是这个原因了.

知道这个原因后你所要做的就是尽量的少向界面上放置控件.
[解决办法]
见到你的界面上有很多的Label控件,建立你使用Grid控件,比如DataGridView,DataGrid,ListView等控件,这样用一个控件就可以代替好多个控件,占用系统的资源就少的多了.
[解决办法]
对 控件多了没办法 重绘很费资源的
从内存一个地方拿图片不知道会不会稍微好一点点
[解决办法]
等吧,现在好多写控件的人水平很差,运行效率太低。

下次不要使用第三方的控件,不好的,都写得太差了,耗内存不去说它了,显示还特别慢,我深有体会。

等吧,等WPF流行吧,那个还比较好。

过渡阶段使用HTML吧,我现在就是WebBrowsor+HTML+JS
[解决办法]
我不大敢再用第三方控件了,没辙的,这些写控件的水平实在太滥了。
[解决办法]
没辙的,那些控件不用双缓冲,你有什么办法呢。

作演示的时候,弄个好一点的电脑吧,只有这个办法了。
[解决办法]
刚才试验了一下
访了 25 Label + pic

好像没有闪烁啊

读书人网 >C#

热点推荐