问题描述:窗口加载时,控件是一个一个刷新,速度慢,能看出控件的背景色,如果窗体是半透明的情况,背景色是白色,效果很差。
处理办法:
1)使用双缓冲(只适合单个控件):
this.SetStyle(ControlStyles.AllPaintingInWmPaint | //不擦除背景 ,减少闪烁
ControlStyles.OptimizedDoubleBuffer | //双缓冲
ControlStyles.UserPaint, //使用自定义的重绘事件,减少闪烁
true);
2)全部控件一次性绘制
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
if (this.IsXpOr2003 == true)
{
cp.ExStyle |= 0x00080000;
this.Opacity = 1;
}
return cp;
}
}
private Boolean IsXpOr2003
{
get
{
OperatingSystem os = Environment.OSVersion;
Version vs = os.Version;
if (os.Platform == PlatformID.Win32NT)
if ((vs.Major == 5) && (vs.Minor != 0))
return true;
else
return false;
else
return false;
}
}
不过这样会导致,窗口最小化后还原时,界面未刷新,显示不完整,需要额外自己刷新,可添加如下代码
private void FrmSet_Resize(object sender, EventArgs e)
{
//窗体恢复正常时
if (this.WindowState == FormWindowState.Normal)
{
System.Threading.Thread th = new System.Threading.Thread(delegate ()
{
for (int i = 0; i < 5; i++)
{
this.Invoke(new System.EventHandler(delegate
{
this.Refresh();
}));
}
});
th.IsBackground = true;
th.Start();
}
}