Позвольте пользователю писать на PictureBox в C#

Класс Graphics предоставляет метод DrawLines, который рисует ряд связанных строк, который иногда называют полилинией. Эта программа позволяет пользователю создать серию полилиний.

Программа сохраняет точки, которые составляют полилинию, как List & lt; Point & gt ;. Он хранит ряд полилиний в списке & lt; List & lt; Point & gt; & gt ;. Он отслеживает новую полилинию, которую пользователь рисует в переменной NewPolyline.

// Полилинии, которые мы рисуем.
private List> Polylines = new List>();

// Новая полилиния, которую мы рисуем.
private List NewPolyline = null;

Когда пользователь нажимает кнопку мыши, следующий код создает новую полилинию.

// Начнем рисовать.
private void picCanvas_MouseDown(object sender, MouseEventArgs e)
{
    // Создаем новую полилинию.
    NewPolyline = new List();
    Polylines.Add(NewPolyline);

    // Добавить первую точку.
    NewPolyline.Add(e.Location);
}

Этот код представляет список NewPolyline, а затем добавляет к нему позицию мыши.

Когда пользователь перемещает мышь, следующий код добавляет новое местоположение мыши в новую полилинию.

// Продолжаем рисование.
private void picCanvas_MouseMove(object sender, MouseEventArgs e)
{
    if (NewPolyline == null) return;
    NewPolyline.Add(e.Location);
    picCanvas.Refresh();
}

Этот код проверяет, создает ли пользователь новую полилинию, проверяя, NewPolyline == null. Если есть новая полилиния, код добавляет текущее местоположение мыши к новой полилинии и обновляет PictureBox, чтобы нарисовать ее так, как она есть.

Когда пользователь освобождает мышь, следующий код удаляет новую полилинию, если она содержит только одну точку.

// Остановить рисование.
private void picCanvas_MouseUp(object sender, MouseEventArgs e)
{
    if (NewPolyline == null) return;

    // См. Новую полилинию содержит более 1 точки.
    if (NewPolyline.Count < 2)
    {
        // Убери это.
        Polylines.RemoveAt(Polylines.Count - 1);
    }

    NewPolyline = null;
    picCanvas.Refresh();
}

Единственным интересным фрагментом кода в этом примере является обработчик событий PictureBox Paint, который рисует полилинии.

// Перерисовать.
private void picCanvas_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
    e.Graphics.Clear(picCanvas.BackColor);

    // Рисуем полилинии.
    foreach (List polyline in Polylines)
    {
        e.Graphics.DrawLines(Pens.Black, polyline.ToArray());
    }
}

Источник: http://csharphelper.com/blog/2015/03/let-the-user-scribble-on-a-picturebox-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector