由于窗体上控件多,且有背景的情况下,控件设为背景设为透明,会导致窗体的刷新很慢很卡,从而窗体在闪烁,卡顿。
之前一直在网上搜寻解决的办法,试过了很多什么双缓冲啊之类的,发现效果并不大。
最后找到下面的方法可以解决了。但是奇怪的是,在有些电脑上运行时会发生窗体不刷新的问题。然后就参考下面的那个网址,最下面的答案。
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%,不想让窗体透明。