您的位置:首页 > 其它

防止窗口抖动以及窗体不刷新问题

2015-10-21 16:39 344 查看
http://stackoverflow.com/questions/5859826/datagridview-draws-wrong

由于窗体上控件多,且有背景的情况下,控件设为背景设为透明,会导致窗体的刷新很慢很卡,从而窗体在闪烁,卡顿。

之前一直在网上搜寻解决的办法,试过了很多什么双缓冲啊之类的,发现效果并不大。

最后找到下面的方法可以解决了。但是奇怪的是,在有些电脑上运行时会发生窗体不刷新的问题。然后就参考下面的那个网址,最下面的答案。

个人总结一下,可能是系统版本的问题所导致的。网上有说是因为“xp特有的双缓冲绘图机制”。后来用上这个WS_EX_COMPOSITED(用双缓冲从下到上绘制窗口的所有子孙),再开启窗体的透明样式,问题都解决了。

protected override CreateParams CreateParams
{
get
{

CreateParams cp = base.CreateParams;

cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED

if (this.IsXpOr2003 == true)
{
cp.ExStyle |= 0x00080000;  // Turn on WS_EX_LAYERED
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;
}
}


只要把透明样式开启便可,所以我把透明度设置为100%,不想让窗体透明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: