Как нарисовать прямоугольник в C # с помощью мыши - PullRequest
1 голос
/ 30 июня 2010

Я хочу нарисовать прямоугольник на форме в C #.Я прочитал и нашел эту статью .Есть ли образцы или учебные пособия?Статья была не очень полезной.

Ответы [ 2 ]

3 голосов
/ 30 июня 2010

Статья, на которую вы ссылаетесь, выглядит как C ++, что может объяснить, почему она вам не очень помогла.

Если вы создаете события для MouseDown и MouseUp, у вас должно быть две угловые точки, необходимые дляпрямоугольник.Оттуда, это вопрос рисования на форме.System.Drawing. * Вероятно должна быть вашей первой остановкой.Ниже приведено несколько учебных пособий:

Рисование с помощью графики в WinForms с использованием C #

Рисование прямоугольника с помощью Winforms (StackOverflow)

Программирование графики с использованием C #

0 голосов
/ 13 декабря 2013

Вам нужны следующие 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;
        }
    }

В-третьих, вам нужно реализовать событие увеличения мыши:

    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);
    }
...