2

私は Invalidate メソッドを理解していないと思います...マウスダウンでマウスの位置にある正方形の左上隅で正方形を描画しようとしています。次に、右下隅がマウスの現在の位置です. 以下は、MouseMove イベントでトリガーされるメソッドです。親は、pictureBox の子を持つパネルです。(私はこれらの上に描画しようとしています。)

問題は にあるようpictureBoxMain.Invalidate()です。コメントアウトすると、コードは期待どおりに動作し、無数の正方形を描画します。

[グラフィックスgは、pictureBox によって作成されるため、pictureBox で Invalidate メソッドを呼び出す理由。]

無効化行のコメントを外すと、マウスの移動に応じてボックスが描画されますが、移動が停止するとすぐにボックスが消えます。私はなぜ私の人生のために運動することはできません. コードをデバッグしようとすると、マウスが動いていないときに MouseMove メソッドが呼び出されているように見えますが、これは意味がありません。

どんな助けでも大歓迎です!

private void pictureBoxMain_MouseMove(object sender, MouseEventArgs e)
    {
        if (MouseDrawLeft)
        {
            //Move
        }
        else if (MouseDrawRight)
        {
            MouseLast = e.Location;
            if (MouseFirst != MouseLast)
            {
                pictureBoxMain.Invalidate();

                Point bl = new Point(MouseFirst.X, MouseLast.Y);
                Point tr = new Point(MouseLast.X, MouseFirst.Y);

                g.DrawLine(pen, MouseFirst, tr);
                g.DrawLine(pen, MouseFirst, bl);
                g.DrawLine(pen, bl, MouseLast);
                g.DrawLine(pen, tr, MouseLast);
            }
        }
    }
4

1 に答える 1

1

すべてのコンポーネント (ボタン、テキスト ボックス、ウィンドウなど) には Paint メソッドがあります。これは、オブジェクトを描画するために、Windows によって定期的に (毎秒 50 回など) 呼び出されます。

オブジェクトに何かをペイントしますが、1 ミリ秒以内にオブジェクトが消えてしまいます。フレームの Paint メソッドをオーバーライドし、そこに描画する必要があります。この方法では、Windows が要求するたびに描画が描画されます。

于 2012-04-26T14:54:20.143 に答える