2010-05-08 72 views
3

我正在绘制面板中的对象的网格工作。当我快速滚动面板时,我得到一个闪烁。我认为启用双缓冲可能会照顾到这一点,但我发现它并没有完全绘制所有内容,而我留下了空白部分。 任何人都可以给我任何可能发生的事情以及我如何纠正它的建议。doublebuffering不减少闪烁

UPDATE:

我发现,我创建了图形与对象的createGraphics(),而不是在paint方法

回答

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的调用一样。