1

标题几乎说明了这一点。我的表单中有一个面板。我在面板中有很多相互反弹的形状。我拥有的形状越多,闪烁就越严重。在此站点上搜索了一段时间后,我将其添加到构造函数中

    this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint 
    | ControlStyles.DoubleBuffer, true);

然后我发现我也应该添加这个

protected override CreateParams CreateParams
{
  get
  {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED (child control double-buffering)
    return cp;
  }
}

在我添加这个之后,屏幕闪烁得更糟了。甚至说它闪烁也不公平。大多数时候它只是空白,每隔一段时间,形状就会短暂闪烁。我绘制形状的代码如下所示。

pnl.Refresh();
Graphics g = pnl.CreateGraphics();
for(int i = 0; i < numOfShapes; i++)
{
    Rectangle myRect = shapeList[i];
    g.FillRectangle(new SolidBrush(Color.Black), myRect);
}

编辑:

我不知道为什么我不能让最后一点代码看起来正确。对于那个很抱歉。我只是刷新面板然后循环遍历矩形数组并将它们绘制到面板

4

0 回答 0