タイトルはほとんどそれを言います。フォーム内にパネルがあります。パネルには、互いに跳ね返る多数のシェイプがあります。形状が多いほど、ちらつきが悪化します。このサイトをしばらく検索した後、これをコンストラクターに追加しました
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);
}
編集:
コードの最後のビットを正しく表示できない理由がわかりません。申し訳ありません。パネルを更新してから、長方形の配列をループしてパネルにペイントしています