當使用鼠標進行滾動查看頁面時,由於頁面會頻繁刷新,如果頁面中控件較多會導致頁面出現閃爍、重影等問題,如下圖所示:
在網上搜索過該問題,大部分都說使用雙緩沖可以解決此類問題,即通過設置DoubleBuffered屬性來減少圖形的閃爍。
public Frm_DataSel()//窗體構造函數 { InitializeComponent(); this.DoubleBuffered = true;//設置本窗體 SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景. SetStyle(ControlStyles.DoubleBuffer, true); // 雙緩沖 }
但是我使用上述代碼進行嘗試之后,發現問題依然存在,並沒有解決。
因此,本隨筆可用作使用雙緩沖之后依然沒有解決問題的小伙伴進行查看和試驗。
具體的解決方案是通過設置CreateParams的ExStyle為ExStyle 為 0x02000000 (WS_EX_COMPOSITED)。
1 /// <summary> 2 /// 解決頁面頻繁刷新時界面閃爍問題 3 /// </summary> 4 protected override CreateParams CreateParams 5 { 6 get 7 { 8 CreateParams cp = base.CreateParams; 9 cp.ExStyle |= 0x02000000; 10 return cp; 11 } 12 }
在添加上述代碼之后,頁面果然幾乎看不到閃爍了,重影問題也消失了
2020-12-01
yoga
參考文章:
http://www.360doc.com/content/20/0418/16/17167475_906853862.shtml