Позвольте пользователю нарисовать линию на форме в приложении WinForms - PullRequest
1 голос
/ 14 марта 2010

Как я могу разрешить пользователю рисовать линию в форме?

Использование левой кнопки мыши для рисования и правой кнопки мыши для стирания.

Ответы [ 3 ]

1 голос
/ 02 марта 2011

Пример, который рисует линию и использует подходящее место для рисования:

   public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        List<Point> points = new List<Point>();

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                points.Add(e.Location);

                Invalidate();
            }
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            if (points.Count > 2)
            {
                e.Graphics.DrawLines(Pens.Black, points.ToArray());
            }
        }
    }

ToArray () не очень хорош, когда список становится длинным.

0 голосов
/ 15 марта 2010

В конечном итоге вы можете захотеть содержать все действия по рисованию / стиранию в пределах определенного элемента управления и согласованно управлять его состоянием перерисовки / аннулирования, но ответ A9S6, несомненно, поможет вам начать и насладиться некоторым рисунком GDI +;)

0 голосов
/ 14 марта 2010

Не так сложно, быстрый пример ... Я не включил здесь чеки.

    Graphics g = null; // initialize in Form_Load with this.CreateGraphics()
    Point lastPoint;

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        lastPoint = e.Location;
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            g.DrawLine(Pens.Blue, lastPoint, e.Location);
            lastPoint = e.Location;
        }
    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {

    }

Приведенный выше пример показывает, как можно рисовать на форме. В идеале вы должны поместить все линейные координаты в коллекцию и нарисовать их с помощью DrawLines (). Затем используйте Graphics :: DrawLines () в Form :: OnPaint. При щелчке правой кнопкой мыши просто очистите коллекцию точек и выполните перерисовку.

...