控件閃爍目前了解的原因無非是各個控件繪制的先後的問題導緻的,解決繪制的問題推薦兩個方式
1.雙緩沖
可以在控件初始化設定,注意父窗體要設定運作允許雙緩沖
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.UpdateStyles();
雙緩存說白了就是先會繪制到緩存中,而不是直接繪制到螢幕。有些情況下感覺沒有效果,其實不然,隻是控件太多,我們不能保證每一控件都是雙緩沖
2.CreateParams
自定義控件内添加:
/// <summary>
/// 封裝建立控件時所需的資訊
/// </summary>
protected override CreateParams CreateParams
{
get
{
var parms = base.CreateParams;
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
return parms;
}
}
調用的窗體裡添加:
/// <summary>
/// 封裝建立控件時所需的資訊
/// </summary>
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
第二種操作簡單,作用也比較明顯