在winform上添加用户控件过多时出现闪烁
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在winform上添加用户控件过多时出现闪烁相关的知识,希望对你有一定的参考价值。
我做了一个用户控件,在一个winform上根据表的行数动态增加用户控件,一行就一个用户控件,但当这个表有几百行数据时,刷新数据还没什么问题,但是窗体一失去焦点再获得焦点时,窗体的用户控件才一个个的出现,几百个用户控件一个一个的出现这个问题太严重了!各位高手有什么绝招教教!
areshh你好:
我这个表的图片什么的全都是加载在内存上的了!我的那个用户控件只有几个panel 几个label和textbox,我试过不动态加这个用户控件,而是用手动的拖了100个左右出来!什么数据也没加上去,但是还是一个一个的刷出来!
christiankula你好:UserControl没有BeginUpdate和EndUpdate这2个方法啊
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();
不过几百个控件,你的问题恐怕也没办法从根本上解决,我的方案就是在加载之前先把整个Form给Visable掉,加载完了再显示出来,不过这也是从视觉效果上看起来不闪烁了而已
你可以试试BeginUpdate和EndUpdate,不过几百个控件,想像中肯定效率不佳,可是也不至于这么不佳 参考技术A 几百个控件应当不会有那么卡,
你检查下控件看有没有加载IO操作、数据库操作、网络操作等耗资源的,特别是控件里面可能用了图片,而图片是保存在磁盘上的资源的,如果那样的话就要把那些图片改为加载后就保存在内存上。 参考技术B 可以像搂上说的加好后再显示,不过最好还是控制下,做个翻页,少显示几个比较好
WinForm用户窗体
用户控件:
相当于自定义的一个panel 里面可以放各种其他控件,并可以在后台一下调用整个此自定义控件。
使用方法:在项目上右键、添加、用户控件,之后用户控件的编辑与普通容器控件类似。如果要在后台往窗体中添加,
将其实例化,然后添加到想要添加的容器的Control集合中。
动态创建添加控件:
配合上面的用户控件,实现类似QQ界面的打开自动加载好友昵称和签名
Name Na = null; public Form2(Name na) { InitializeComponent(); Na = na; //填充用户信息 panel2.BackgroundImage = Image.FromFile(Na.Pic); label1.Text = Na.Name1; label2.Text = Na.Nickname; //填充好友信息 Friend f = new FridendCode().SeleAf(na.Number); if (f != null) { string[] ff = f.Friendsnumber.Split(‘,‘); foreach (string fff in ff) { Name nf = new NameCode().SeleAll(fff); if (nf != null) { UserControl1 v1 = new UserControl1(); v1.panel1.BackgroundImage = Image.FromFile(nf.Pic); v1.label1.Text = nf.Name1; v1.label2.Text = nf.Nickname; flowLayoutPanel1.Controls.Add(v1); } } } }
以上是关于在winform上添加用户控件过多时出现闪烁的主要内容,如果未能解决你的问题,请参考以下文章
C# WinForm 当窗体控件图片过多时,切换界面的显示会发生闪烁,该怎么取消闪烁。(注:双缓冲开启了)