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;
}
}
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;
}
}
修改控件之前先this.SuspendLayout();
修改完之后再this.PerformLayout();
例如,通常先调用 SuspendLayout 方法,然后设置控件的 Size、Location、Anchor 或 Dock 属性,最后调用 ResumeLayout 方法以使更改生效。要成功调用 ResumeLayout,一定不能有挂起的对 SuspendLayout 的调用。注意:
将多个控件添加到父控件时,建议在初始化要添加的控件之前调用 SuspendLayout 方法。将控件添加到父控件之后,调用 ResumeLayout 方法。这样就可以提高带有许多控件的应用程序的性能。
修改完之后再this.PerformLayout();