闪烁严重的直接看最后,双缓冲,0x02000000,都没什么用!
以下是早期解法,闪烁能解,但是你会发现控件刷刷刷的闪,而且页面切换的时候也会闪。
个人觉得这种全网都在重复的方法相当于你得了感冒,结果把自己鼻子切了,只要有这个问题就是你代码书写的问题!
Winform在单个UserControl中控件布局过多,在加载的时候就会出现页面闪烁的问题。网上也查了很多资料,有很多涉及到BufferedGraphics,双缓冲,重写控件,以及将构造函数中的东西都放在Form_Load中,然而都没有什么卵用。最后发现重载CreateParams可以做到,而且不是网上大部分写的只对WS_EX_COMPOSITED进行处理。
解决方法如下:
在容器Form中增加:
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
//WS_EX_COMPOSITED
cp.ExStyle |= 0x02000000;
return cp;
}
}
在UserControl中增加:
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
//WS_CLIPCHILDREN
cp.Style &= ~0x02000000;
return cp;
}
}
WS_EX_COMPOSITED该窗口所有的子窗口使用双缓冲已自下而上的顺序绘图。
WS_CLIPCHILDREN控制父窗口对子窗口区域进行绘制,如果设置了相关属性,则父窗口不对子窗口区域进行绘制。
这个问题的最最最根本的原因就是,你的构造函数里面的东西太多了,不管你的父容器还是子容器能不放构造函数里的就不要放构造函数里面,Designer里面的代码能少就少。