欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

winform 添加背景图 闪屏问题解决

程序员文章站 2022-05-18 10:16:22
winform中只要添加了背景图片资源,窗体加载显示的时候就会出现不停的闪屏操作,网上找了很多方法,效果都不明显; 然后自己观察和思路:看窗体的加载过程,当有背景图的时候,首先出来的是背景图,之后背景图上层的控件比如Panel、Button等就会闪烁,如果删除了背景图,就页面加载速度也快了,也咩有闪 ......

winform中只要添加了背景图片资源,窗体加载显示的时候就会出现不停的闪屏操作,网上找了很多方法,效果都不明显;

然后自己观察和思路:看窗体的加载过程,当有背景图的时候,首先出来的是背景图,之后背景图上层的控件比如panel、button等就会闪烁,如果删除了背景图,就页面加载速度也快了,也咩有闪屏的现象了

自己的思路:等页面完全加载完成时候,再设置背景图,是否就不会出现严重闪屏,想到了一个方法入下:

winform 添加背景图 闪屏问题解决
1   private void form_shown(object sender, eventargs e)
2         {
3             显示背景图控件.backgroundimage = image.fromfile("图片资源地址");
4         }

shown方法是所有控件加载完成后执行,只会触发一次

看了下效果,闪屏没有之前的严重了,但是还是会出现闪屏

最后还试了很多种方法,都么得解决根本闪屏操作

只有下面这段代码是真的神奇,加上就一下也不闪啦 winform 添加背景图 闪屏问题解决

 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         }  

将这段代码复制粘贴到闪屏的窗体类中,就不会闪屏了

参考地址:

 (微软官方)

   (这个博主写的比较详细透彻,自己又悟到了)