winform 自定义控件闪烁问题极为让人头疼,在网上搜索了很多方法,最后总算是勉强解决,但老实说效果还不是很好。
首先第一种方法:
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
this.UpdateStyles();
网上见到的最多的就是这个方法,但基本上没有看到什么效果。
第二种方法:
在自定义控件中添加的:
protected override CreateParams CreateParams
{
get
{
var parms = base.CreateParams;
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
return parms;
}
}
在调用自定义控件的窗体内添加的:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
第二种方法解决了我的问题。不过看起来还是很死板,只能说是勉强解决了。而且因为在调用自定义控件的窗体内添加的方法的关系,窗体上其他控件的重绘多少有点儿问题。后来我把这个方法去掉了,发现值需要在自定义控件内添加方法貌似也没什么问题。
希望以后能有更好的方法解决自定义控件不停闪烁的问题。