最近问了一个相关的问题,关于.NET Compact Framework中的双缓冲,当绘制基础控件的绘画时,我注意到另一个导致一些闪烁的问题。
我的网格控件,继承自DataGrid,在基础DataGrid的绘画之上覆盖OnPaint以进行一些自定义绘制,而某些事件导致OnPaint触发(如CurrentCellChanged),其他一些事件(KeyPress)事件,单击但不更改当前单元格的MouseDown事件或2个滚动条的ValueChanged事件导致基础DataGrid重绘但OnPaint未被触发(因此,对于瞬间,DataGrid看起来像普通的DataGrid,没有我的自定义标题)。
有没有好办法防止这种情况发生?
目前我所做的只是在每个事件处理程序中手动重做绘制,以绘制在没有OnPaint触发的情况下绘制基本DataGrid的事件。这只是一个糟糕的解决方案,偶尔会有一些闪烁。 (就像我在800行网格中垂直滚动它可能会闪烁5次)。