我正在面板中绘制一组对象的网格。当我快速滚动面板时,会出现闪烁现象。我曾尝试启用双缓冲来解决这个问题,但我发现它并没有完全绘制所有内容,留下了空白部分。
请问有人能给我建议,可能发生了什么以及如何进行更正。
更新:
我发现我使用Creategraphics()创建了图形对象,而不是使用paint方法中的参数。
你是如何设置双缓冲的?
你应该将控件的 DoubleBuffered 属性设为 true。
public UserControl1()
{
InitializeComponent();
this.DoubleBuffered = true;
}
或者
使用SetStyle,并设置OptimizedBoubleBuffer和AllPaintingInWmPaint两个属性
public UserControl1()
{
InitializeComponent();
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
}
ControlStyles.AllPaintingInWmPaint指示控件忽略WM_ERASEBKGND消息。这将减少您从滚动中看到的闪烁。当将DoubleBuffered属性设置为true时,实际上隐含了这一点,事实上它会与第二个示例中的SetStyle进行相同的调用。