标题几乎说明了这一点。我的表单中有一个面板。我在面板中有很多相互反弹的形状。我拥有的形状越多,闪烁就越严重。在此站点上搜索了一段时间后,我将其添加到构造函数中
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);
}
编辑:
我不知道为什么我不能让最后一点代码看起来正确。对于那个很抱歉。我只是刷新面板然后循环遍历矩形数组并将它们绘制到面板