1

Windowsフォームアプリケーションで作業していますSystem.Drawing.Graphicsが、ピクチャボックスの上で使用しているときに、グラフィックが表示されないか、消える前に一瞬だけ表示されます。

これは、ピクチャボックスを設定するために使用しているコードです (これは簡略化されたバージョンであり、動作を示しています)

private void showGraphic()
{
    pictureBox1.Invalidate();
    System.Drawing.Graphics graphics = this.pictureBox1.CreateGraphics();
    SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 255));
    System.Drawing.Rectangle rect = new System.Drawing.Rectangle(100,100, 50, 50);

    graphics.FillEllipse(semiTransBrush, rect);
}

private void button1_Click(object sender, EventArgs e)
{
    showGraphic();
}

ピクチャ ボックスの設定は、プロパティ ペインで宣言されたファイルからの画像を使用した既定の設定です。

ボタンで開始され、停止する前にグラフィック描画を実行するタイマーを使用してこの問題を解決できましたが、これはひどい解決策のように思えたので、より良い方法が存在する場合は、これを実行したかったのです。古いコンピュータへの移植性の欠如。

前もって感謝します

4

3 に答える 3

2

PictureBox の Paint メソッドのハンドラーを登録し、そのメソッドで描画を行う必要があります。(注: PaintEventArgs パラメーターを介して渡された Graphics オブジェクトを使用します。) これにより、PictureBox が再描画されるたびに、描画コードも実行されることが保証されます。それ以外の場合は、さまざまな理由で更新されるものの上に描画しているだけです。

Paint イベントに登録したら、いつでも再描画する必要があり、PictureBox で Invalidate() を呼び出すと、描画コードが実行されます。プライベート ブール メンバー変数を使用して、オーバーレイ グラフィックスを描画する必要があるかどうかを追跡できます。

于 2014-12-15T19:30:17.433 に答える
0

呼び出すpictureBox1.Invalidate()と、画像ボックスを描画する必要があるというメッセージがキューに入れられます。そのメッセージが処理される前に、現在の画像の上に楕円を描いています。次に、メッセージループが無効化からのペイントメッセージを処理し、それ自体を再ペイントします(これにより画像が消去されます)

于 2014-12-15T19:30:32.433 に答える