1

C# でフォームに四角形を描画したいと考えています。この記事を読んで見つけました。サンプルやチュートリアルはありますか? 記事はあまり役に立ちませんでした。

4

2 に答える 2

3

あなたがリンクした記事は C++ のようです。

MouseDown と MouseUp のイベントを作成する場合、四角形に必要な 2 つの角点が必要です。そこからは、フォームに描くことです。System.Drawing.* が最初の目的地になるはずです。以下にリンクされているチュートリアルがいくつかあります。

C# を使用して WinForms でグラフィックスを使用して描画する

Winforms (StackOverflow) を使用して四角形を描画します

C# を使用したグラフィックス プログラミング

于 2010-06-30T13:57:29.297 に答える
0

この 3 つの関数と変数が必要です。

    private Graphics g;
    Pen pen = new System.Drawing.Pen(Color.Blue, 2F);
    private Rectangle rectangle;
    private int posX, posY, width, height; 

次に、マウス ダウン イベントを作成する必要があります。

    private void pictureCrop_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            posX = e.X;
            posY = e.Y;
        }
    }

3 番目に、マウス アップ イベントを実装する必要があります。

    private void pictureCrop_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button != MouseButtons.Left)
            return;

        if (e.X > posX && e.Y > posY) // top left to bottom right
        {
            width = Math.Abs(e.X - posX);
            height = Math.Abs(e.Y - posY);
        }
        else if (e.X < posX && e.Y < posY) // bottom right to top left
        {
            width = Math.Abs(posX - e.X);
            height = Math.Abs(posY - e.Y);

            posX = e.X;
            posY = e.Y;
        }
        else if (e.X < posX && e.Y > posY) // top right to bottom left
        {
            width = Math.Abs(posX - e.X);
            height = Math.Abs(posY - e.Y);

            posX = e.X;
        }
        else if (e.X > posX && e.Y < posY) // bottom left to top right
        {
            width = Math.Abs(posX - e.X);
            height = Math.Abs(posY - e.Y);

            posY = e.Y;
        }

        g.DrawImage(_bitmap, 0, 0);
        rectangle = new Rectangle(posX, posY, width, height);
        g = pictureCrop.CreateGraphics();
        g.DrawRectangle(pen, rectangle);
    }

また、フォームのサイズを変更または移動したときに、四角形がそこにあることを確認するには:

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        Graphics graph = e.Graphics;
        graph.DrawImage(_bitmap, 0, 0);
        Rectangle rec = new Rectangle(posX, posY, width, height);
        graph.DrawRectangle(pen, rec);
    }
于 2013-12-13T05:25:25.297 に答える