winform 添加背景图 闪屏问题解决
程序员文章站
2023-01-24 21:33:34
winform中只要添加了背景图片资源,窗体加载显示的时候就会出现不停的闪屏操作,网上找了很多方法,效果都不明显; 然后自己观察和思路:看窗体的加载过程,当有背景图的时候,首先出来的是背景图,之后背景图上层的控件比如Panel、Button等就会闪烁,如果删除了背景图,就页面加载速度也快了,也咩有闪 ......
winform中只要添加了背景图片资源,窗体加载显示的时候就会出现不停的闪屏操作,网上找了很多方法,效果都不明显;
然后自己观察和思路:看窗体的加载过程,当有背景图的时候,首先出来的是背景图,之后背景图上层的控件比如panel、button等就会闪烁,如果删除了背景图,就页面加载速度也快了,也咩有闪屏的现象了
自己的思路:等页面完全加载完成时候,再设置背景图,是否就不会出现严重闪屏,想到了一个方法入下:
1 private void form_shown(object sender, eventargs e) 2 { 3 显示背景图控件.backgroundimage = image.fromfile("图片资源地址"); 4 }
shown方法是所有控件加载完成后执行,只会触发一次
看了下效果,闪屏没有之前的严重了,但是还是会出现闪屏
最后还试了很多种方法,都么得解决根本闪屏操作
只有下面这段代码是真的神奇,加上就一下也不闪啦
1 protected override createparams createparams 2 { 3 get 4 { 5 6 createparams cp = base.createparams; 7 8 cp.exstyle |= 0x02000000; // turn on ws_ex_composited 9 10 if (this.isxpor2003 == true) 11 { 12 cp.exstyle |= 0x00080000; // turn on ws_ex_layered 13 this.opacity = 1; 14 } 15 16 return cp; 17 18 } 19 20 } //防止闪烁 21 22 private boolean isxpor2003 23 { 24 get 25 { 26 operatingsystem os = environment.osversion; 27 version vs = os.version; 28 29 if (os.platform == platformid.win32nt) 30 if ((vs.major == 5) && (vs.minor != 0)) 31 return true; 32 else 33 return false; 34 else 35 return false; 36 } 37 }
将这段代码复制粘贴到闪屏的窗体类中,就不会闪屏了
参考地址:
(微软官方)
(这个博主写的比较详细透彻,自己又悟到了)