3
我正在绘制面板中的对象的网格工作。当我快速滚动面板时,我得到一个闪烁。我认为启用双缓冲可能会照顾到这一点,但我发现它并没有完全绘制所有内容,而我留下了空白部分。 任何人都可以给我任何可能发生的事情以及我如何纠正它的建议。doublebuffering不减少闪烁
UPDATE:
我发现,我创建了图形与对象的createGraphics(),而不是在paint方法
我正在绘制面板中的对象的网格工作。当我快速滚动面板时,我得到一个闪烁。我认为启用双缓冲可能会照顾到这一点,但我发现它并没有完全绘制所有内容,而我留下了空白部分。 任何人都可以给我任何可能发生的事情以及我如何纠正它的建议。doublebuffering不减少闪烁
UPDATE:
我发现,我创建了图形与对象的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的调用一样。