Позвольте пользователю писать на 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());
}
}
