在winform上添加用户控件过多时出现闪烁

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在winform上添加用户控件过多时出现闪烁相关的知识,希望对你有一定的参考价值。

我做了一个用户控件,在一个winform上根据表的行数动态增加用户控件,一行就一个用户控件,但当这个表有几百行数据时,刷新数据还没什么问题,但是窗体一失去焦点再获得焦点时,窗体的用户控件才一个个的出现,几百个用户控件一个一个的出现这个问题太严重了!各位高手有什么绝招教教!
areshh你好:
我这个表的图片什么的全都是加载在内存上的了!我的那个用户控件只有几个panel 几个label和textbox,我试过不动态加这个用户控件,而是用手动的拖了100个左右出来!什么数据也没加上去,但是还是一个一个的刷出来!
christiankula你好:UserControl没有BeginUpdate和EndUpdate这2个方法啊

好像有一个什么Style的什么东东,开启一下双缓冲,就是控制刷新的
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 当窗体控件图片过多时,切换界面的显示会发生闪烁,该怎么取消闪烁。(注:双缓冲开启了)

winform中panel刷新闪烁的问题

winform 控件移动的闪烁问题

在winform画了一个自定义控件,现在我要在运行后进行拉伸动态改变大小,但快速拉伸就闪烁,怎么消除

C#关于winform窗口控件过多,显示慢的问题?

WinForm用户窗体