当使用鼠标进行滚动查看页面时,由于页面会频繁刷新,如果页面中控件较多会导致页面出现闪烁、重影等问题,如下图所示:
在网上搜索过该问题,大部分都说使用双缓冲可以解决此类问题,即通过设置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