Позвольте пользователю писать с различными стилями линии в C#
Пример
В предыдущем примере хранится информация о полилинии в List & lt; Point & gt ;. Чтобы отслеживать цвет, толщину и стиль линии, этот пример представляет собой полилинию со следующим классом Polyline.
class Polyline { public Color Color = Color.Black; public int Thickness = 1; public DashStyle DashStyle = DashStyle.Solid; public ListPoints = new List (); public void Draw(Graphics gr) { using (Pen the_pen = new Pen(Color, Thickness)) { the_pen.DashStyle = DashStyle; if (DashStyle == DashStyle.Custom) { the_pen.DashPattern = new float[] { 10, 2 }; } gr.DrawLines(the_pen, Points.ToArray()); } } }
Единственной действительно интересной частью класса Polyline является его метод Draw, который рисует полилинию с использованием соответствующего цвета, толщины и стиля.
Теперь программа использует список Polylines для хранения информации о чертеже.
// Полилинии, которые мы рисуем. private ListPolylines = new List (); // Новая полилиния, которую мы рисуем. private Polyline NewPolyline = null;
Программа использует частные переменные для хранения выбранных в данный момент параметров чертежа (цвет, толщина и стиль).
// Выбранные в данный момент параметры чертежа. private Color DrawingColor = Color.Black; private int DrawingThickness = 1; private DashStyle DrawingDashStyle = DashStyle.Solid;
Выпадающие кнопки на панели инструментов позволяют пользователю выбирать параметры чертежа. Следующий код показывает, как работают кнопки. Цветные кнопки имеют значения ForeColor, равные цветам, которые они представляют. Кнопки толщины имеют свой текст, установленный на их толщину. Кнопки стиля имеют свой текст, заданный именами их стилей. Все кнопки отображают изображения.
// Выберите соответствующий цвет. private void ColorTool_Click(object sender, EventArgs e) { ToolStripMenuItem tool = sender as ToolStripMenuItem; toolColor.Image = tool.Image; DrawingColor = tool.ForeColor; } // Выберите толщину линии. private void ThicknessTool_Click(object sender, EventArgs e) { ToolStripMenuItem tool = sender as ToolStripMenuItem; toolThick.Image = tool.Image; DrawingThickness = int.Parse(tool.Text); } // Выберите стиль тире. private void StyleTool_Click(object sender, EventArgs e) { ToolStripMenuItem tool = sender as ToolStripMenuItem; toolStyle.Image = tool.Image; switch (tool.Text) { case "Solid": DrawingDashStyle = DashStyle.Solid; break; case "Dash": DrawingDashStyle = DashStyle.Dash; break; case "Dot": DrawingDashStyle = DashStyle.Dot; break; case "Custom": DrawingDashStyle = DashStyle.Custom; break; } }
Этот код просто сохраняет выбор пользователя в частных переменных.
В следующем коде показаны обработчики событий мыши, которые программа использует для создания новой полилинии. Они похожи на предыдущую версию, за исключением того, что они используют новые параметры чертежа.
// Начнем рисовать. private void picCanvas_MouseDown(object sender, MouseEventArgs e) { // Создаем новую полилинию. NewPolyline = new Polyline(); Polylines.Add(NewPolyline); // Инициализируйте его и добавьте первую точку. NewPolyline.Color = DrawingColor; NewPolyline.Thickness = DrawingThickness; NewPolyline.DashStyle = DrawingDashStyle; NewPolyline.Points.Add(e.Location); } // Продолжим рисование. private void picCanvas_MouseMove(object sender, MouseEventArgs e) { if (NewPolyline == null) return; NewPolyline.Points.Add(e.Location); picCanvas.Refresh(); } // Остановить рисование. private void picCanvas_MouseUp(object sender, MouseEventArgs e) { if (NewPolyline == null) return; // Смотрите, если новая полилиния содержит более 1 точки. if (NewPolyline.Points.Count < 2) { // Убери это. Polylines.RemoveAt(Polylines.Count - 1); } NewPolyline = null; picCanvas.Refresh(); }
Окончательные изменения в программе выполняются в обработчике событий Paint.
// Перерисовать. private void picCanvas_Paint(object sender, PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; e.Graphics.Clear(picCanvas.BackColor); // Рисуем полилинии. foreach (Polyline polyline in Polylines) { polyline.Draw(e.Graphics); } }