日期:2014-05-19  浏览次数:20725 次

控件过多闪烁问题
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读一次保存到内存中看看会不会好一点.
------解决方案--------------------
控件在界面上多了以后会闪的历害,这时设置Optimized