0

panel1 という名前のパネルを含むユーザー コントロールがあります。panel1_paintパネルにいくつかの線を描画する命令があります。以下の行で、Windows フォームでペイント イベントを実行します。

注: DrawLines は UserControl1.CS で定義されています。

public void DrawLines()
{
    ...
    ...
            panel1.Invalidate();    
}

なぜこれが実行されないのかわかりません。線を描画してからパネルが更新され、パネルがクリアされる可能性があります。だから私はこれに私のコードを変更しました:

public void DrawLines()
{
    ...
    ...
    panel1_Paint(this, new PaintEventArgs(panel1.CreateGraphics(),
         panel1.ClientRectangle));  


}

これはうまく機能します。パネルにいくつかの線を描画します。現在、主要部分は次のとおりです。実行時にパネルに子として作成されるオブジェクトがいくつかあります。パネル上でそれらを移動したい (たとえば、火のパーティクルがあるとします)。そのため、それらを で移動 (アニメーション化) すると、Paint Eventtimerによって描画された線e.Graphicsがクリアされ、パネル上のオブジェクト (パーティクル) のいずれかがそれらの上を移動すると削除されます。では、どうすればこれを回避できますか?! 無効化に問題はありますか? パネルに線と動く粒子の両方を表示するにはどうすればよいですか? パネルはグラフィックスを作成しましたが、オブジェクトを移動するとグラフィックスが削除されるのはなぜですか?

4

1 に答える 1

1

提供された Graphics を Paint() イベントで使用する方法は次のとおりです。

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        Graphics G = e.Graphics;

        // ... use "G" to draw with ...
        G.DrawLine(Pens.Black, 0, 0, panel1.Width, panel1.Height);
    }

次に、次のように簡単に使用できます。

panel1.Invalidate();
于 2013-06-05T18:21:49.067 に答える