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