Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 双缓冲不减少闪烁_C#_.net_Winforms_Gdi+ - Fatal编程技术网

C# 双缓冲不减少闪烁

C# 双缓冲不减少闪烁,c#,.net,winforms,gdi+,C#,.net,Winforms,Gdi+,我正在绘制面板中对象的网格。当我快速滚动面板时,会出现闪烁。我原以为启用双缓冲可以解决这个问题,但我发现它并没有完全绘制所有内容,我只剩下空白部分。 有没有人能给我一些建议,看看会发生什么,我该如何纠正 更新: 我发现我是用Creategraphics()创建图形对象,而不是使用paint方法中的参数如何设置双缓冲 您应该将控件的DoubleBuffered属性设置为true public UserControl1() { InitializeComponent(); this.Doub

我正在绘制面板中对象的网格。当我快速滚动面板时,会出现闪烁。我原以为启用双缓冲可以解决这个问题,但我发现它并没有完全绘制所有内容,我只剩下空白部分。 有没有人能给我一些建议,看看会发生什么,我该如何纠正

更新:


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

如何设置双缓冲

您应该将控件的DoubleBuffered属性设置为true

public UserControl1()
{
  InitializeComponent();
  this.DoubleBuffered = true;
}

使用SetStyle,并同时设置OptimizedBoubleBuffer和AllPaintingInWmPaint

public UserControl1()
{
  InitializeComponent();
  SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);      
}
ControlStyles.AllPaintingWMPAINT指示控件忽略WM_擦除BKGND消息。这将减少您看到的闪烁,尤其是在滚动时。当将DoubleBuffered属性设置为true时,这意味着它调用了与第二个示例中相同的SetStyle