自製的使用者控制項(UserControl)在畫面捲動時,常常會有閃爍的問題,爬文爬了好久終於找到解決方法,趕快記錄下來。
UserControl增加底下程式碼:
/// <summary>
/// 覆寫CreateParams方法,解決自訂UserControl捲動時閃爍的問題
/// 自訂控件的父層要 Turn on WS_EX_COMPOSITED
/// 自訂控件要 Turn off WS_CLIPCHILDREN (***)
/// </summary>
protected override CreateParams CreateParams
{
get
{
var parms = base.CreateParams;
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
return parms;
}
}
放置UserControl的容器,例如 Form 或其他的 UserControl,增加底下程式碼:
/// <summary>
/// 覆寫CreateParams方法,解決自訂UserControl捲動時閃爍的問題
/// 自訂控件的父層要 Turn on WS_EX_COMPOSITED (***)
/// 自訂控件要 Turn off WS_CLIPCHILDREN
/// </summary>
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}