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 工作时都在线,希望知道怎么做的可以教下。
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 工作时都在线,希望知道怎么做的可以教下。
this.Width = 1024;
this.Height = 768;
this.BackgroundImage =bitmap;
Label[] lbl = new Label[220];
for (int i = 0; i < 220; i++)
{
lbl[i] = new Label();
lbl[i].Image = bitmap;
lbl[i].Left = i % 10 * 110;
lbl[i].Top = i / 10 * (lbl[i].Height + 10);
this.Controls.Add(lbl[i]);
}读到内存中后只是窗体显示的速度快了,但是图片闪烁没有好转。
每当窗体被其他东西盖住再显示的时候控件闪烁非常严重
访了 25 Label + pic好像没有闪烁啊
新的进展,我发现闪烁的原因是因为label的背景色为透明引起的,如果不透明的话速度就很快了,可是一定要透明才可以啊,有没有办法?
把图片先合在一起,再放到panel里试试
合在一起事件如何执行?和才一起效果到是会很好
自己写一个控件不就是
不一定什么都用人家的
自己写的控件,画图片也一样会有这种想象。最终也没能解决这个问题,我采取了超笨的方法,那就是不设置LABEL背景透明,而截取比较大一点的图替换,这样速度便到达要求了。虽然问题没解决,但是还是谢谢大家了~`
做法是,每个控件的构造函数中加入
SetStyle(ControlStyles.DoubleBuffer, true);
再不行加
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
应该就可以了