UserControl里有很多控件都是程序运行时Add进去的.而且会随着用户的点击而改变控件的数量和内容.比较不爽的是,每次用户点击时因为先删除原有控件再重绘新控件而使屏幕闪动.如果避免这个现象?让窗口的内容一眨眼就变化?发一个代码片断:
        public static String PreFix = "Power_"; //给分控件名称添加的前缀        public void AddPanels()
        {
            Point p = label1.Location;
            Controls.Remove(label1);
            for (int i = 0; i < mainPoints.Length; i++)
            {
                String powerName = mainPoints[i];
                Control c = Controls[PreFix + powerName];
                if (c != null) Controls.Remove(c);
                PowerSetCtrl pn = new PowerSetCtrl(powerName, HY);
                pn.ShowPower = showPower;
                pn.AddControls();
              //  this.Height += pn.Height + 6;                pn.Location =  p;
                Controls.Add(pn);                p.Y += pn.Height + 6;
            }
        }

解决方案 »

  1.   

    每个程序里都有的一句话,楼主先试试。问题应该就是出现在这里。
    修改控件之前先this.SuspendLayout();
    修改完之后再this.PerformLayout();
      

  2.   

    当调整控件的多个属性时,将先后使用 SuspendLayout 和 ResumeLayout 方法取消多个 Layout 事件。
    例如,通常先调用 SuspendLayout 方法,然后设置控件的 Size、Location、Anchor 或 Dock 属性,最后调用 ResumeLayout 方法以使更改生效。要成功调用 ResumeLayout,一定不能有挂起的对 SuspendLayout 的调用。注意: 
    将多个控件添加到父控件时,建议在初始化要添加的控件之前调用 SuspendLayout 方法。将控件添加到父控件之后,调用 ResumeLayout 方法。这样就可以提高带有许多控件的应用程序的性能。
     
      

  3.   

    修改控件之前先this.SuspendLayout();
    修改完之后再this.PerformLayout();
      

  4.   

    用ajax客户端编程就不会闪烁了,如果没有dropdownlist,把控件放在updatepanel中也许不会感到闪烁