0

パネルの Paint イベント内に、2 つの点の間に青い線を描画するコードがあります。

        private void panel1_Paint(object sender, PaintEventArgs e)
    {
        panel1.AllowDrop = true;
        listBox1.AllowDrop = true;
        if (!s.IsEmpty && !f.IsEmpty)
        {

            e.Graphics.DrawLine(new Pen(Color.Blue, 5f), f, s);
            s = Point.Empty;
            f = Point.Empty;

        }

    }

Im SetPoint メソッドでパネルを無効にします。

     void setPoint(Point p)
    {
        if (f.IsEmpty)
            f = p;
        else
        {
            s = p;
            panel1.Invalidate();
        }


    }

これは、ボタンをクリックすることによってトリガーされます。線を引きますが、問題は、1 つの線が既に存在する場合です。上書きします。問題はにあると思いましたInvalidateRefresh()しかし、または機能しないため、修正方法がわかりUpdate()ません。
私が間違っていることは何ですか?

4

1 に答える 1

1

すべてのポイントを何らかの構造に保存する必要があります。Paint メソッドでは、構造をループしてすべての線を描画します。

これは、ペイントがアクティブ化されると、すべてのコントロールがもう一度再描画され、以前に何があったかを「記憶」できず、内部に記述したことだけを実行するためです。

于 2012-12-16T13:28:00.977 に答える