双重缓冲不会减少闪烁

时间:2010-05-08 13:46:46

标签: c# .net winforms gdi+

我正在Panel中绘制对象的网格。当我快速滚动面板时,我得到一个闪烁。我认为启用双缓冲可能会解决这个问题,但我发现它并没有完全绘制所有内容,而是留下空白部分。 任何人都可以给我一些关于可能发生的事情的建议以及我如何纠正它。

更新:

我发现我使用Creategraphics()创建图形对象,而不是使用paint方法中的Parameter

1 个答案:

答案 0 :(得分:1)

你是如何设置双缓冲的?

您应该将控件的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进行相同的调用。