3

開始点と領域の代わりに開始点と終了点で Rectangle を描画する方法はありますか? 次のコードを使用して、マウスでフォームに四角形を描画しています。

    System.Drawing.Graphics formGraphics;
    bool isDown = false;
    int initialX;
    int initialY;

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        isDown = true;
        initialX = e.X;
        initialY = e.Y;
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (isDown == true)
        {
            this.Refresh();
            Pen drwaPen = new Pen(Color.Navy,1);
            int width = e.X - initialX, height = e.Y - initialY;
            //if (Math.Sign (width) == -1) width = width 
            //Rectangle rect = new Rectangle(initialPt.X, initialPt.Y, Cursor.Position.X - initialPt.X, Cursor.Position.Y - initialPt.Y);
            Rectangle rect = new Rectangle(initialX, initialY, width * Math.Sign(width), height * Math.Sign(height));

            formGraphics = this.CreateGraphics();
            formGraphics.DrawRectangle(drwaPen, rect);
        }
    }
    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        isDown = false;
    }

このコードで四角形を描画できます。マウスを開始点から戻すと、四角形は反転するはずですが、これを行う代わりに、四角形はマウスカーソルの反対方向に描画し続けます。要するに、このコードは順方向に四角形を描画している間は正常に機能しますが、逆方向には機能しません。

4

2 に答える 2

8

Jamiec が述べたようInvalidateに、ハンドラーを呼び出して、メソッド/イベント ハンドラーMouseMoveで描画を行うだけです。OnPaintPaint

正しい長方形を前方または後方に描画するには、次のことを試してください。

Rectangle rect = new Rectangle(Math.Min(e.X, initialX), 
                               Math.Min(e.Y, initialY), 
                               Math.Abs(e.X - initialX), 
                               Math.Abs(e.Y - initialY));
于 2012-10-01T11:47:05.947 に答える