为什么动态创建控件速度会这么慢?比如创建100个Label lbltest=new Lable();lbltest.parent=this;

解决方案 »

  1.   

    创建控件时先临时挂起布局,SuspendLayout (),创建完后用 ResumeLayout()
      

  2.   

    没用的,.net创建多控件的时候,速度就是很慢,除非绘制控件~~
      

  3.   

    SuspendLayout();
                for (int i = 0; i < 100; i++)
                {
                    Label lb = new Label();
                    lb.Text = i.ToString();
                    lb.Location = new Point(100, i * 20 + 20);
                    Controls.Add(lb);
                }
                ResumeLayout();你试下,差别大了,N倍的差距
      

  4.   

    我在没有用SuspendLayout()时花了2-3秒创建LABEL用了SuspendLayout();后只花了不到1秒,0.5秒的样子
      

  5.   

    控件越多越明显,我测试了500个LABEL,如果不挂起布局,需要10+秒,如果挂起布局只需2秒不到。100个LABEL在我电脑上根本就是一闪而过,用不上半秒
      

  6.   

    我在5年前就试过了,在一个界面上用TEXTBOX拼一个表格,整个界面上有100+个TEXTBOX,那时还是PIII 500的CPU 256MB内存,生成界面也就2秒左右,难道这也算慢?如果用现在的配置100个控件根本就是0.5秒以内的事 。不知道大家有没测试过,控件的加载肯定是很快的。别说你们用的是PII
      

  7.   

    那如何在Web窗体上动态生成一个TextBox控件,
    我写了以后,错误提示是这个动态生成的控件的属性<runat=server>没有设置,
    怎样动态设置呀??
      

  8.   

    ismezy2002,没有验证过就没有发言权,5年前你用什么编制程序??
    用VB别说30,100个也没有问题的!用C的话,200个也不会晃动~~
    用.Net,我的计算机是1G内存,PIII3.0的,生成50个Lable需要2-4秒钟!!!
    而且生成后,在窗体间切换都会闪动——屏幕刷新都会有问题,这不是代码能够解决的。编程语言还是有很大差异的.
      

  9.   

    显然5年前我就在用C#了,如果不是C#你以为我会这么回贴吗?你说没验证过就没有发言权,不知道你验证过没有,我回贴一般都会验证的,我上面贴出的代码(可能你没看到,我再贴一遍),有兴趣的可以自己单独创建一个窗口,放一个Button上去在单击事件中加上如下代码,看看创建100个LABEL需要多久。另外可以试试删掉SuspendLayout();这一行需要多久,并且加大循环次数试试看2者的区别。
                long nStart = DateTime.Now.Ticks;
                SuspendLayout();
                for (int i = 1; i <= 100; i++)
                {
                    Label lb = new Label();
                    lb.Text = i.ToString();
                    lb.AutoSize = true;
                    lb.Location = new Point(i % 30 * 20 + 20, 20 + i / 30 * 20);                Controls.Add(lb);
                }
                ResumeLayout();
                long nEnd = DateTime.Now.Ticks;
                MessageBox.Show(((nEnd - nStart) / 10000).ToString() + "毫秒");