Позвольте пользователю писать на 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 (Listpolyline in Polylines) { e.Graphics.DrawLines(Pens.Black, polyline.ToArray()); } }