Листинг 2

public partial class Form1: Form

{

List<Point> PointsList; //Список вершин фигуры

Point oldCursor; //Старое положение курсора

DrawMode drMode; //Режим рисования фигур

public Form1()

{

InitializeComponent();

PointsList = new List<Point>();

oldCursor = new Point(0,0);

drMode = DrawMode.None;

}

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

Graphics g = CreateGraphics(); //Создаем объект Graphics

Pen pen= new Pen(Color.Black, 1);//Создаем объект "пера"

//Объявляем локальную переменную для хранения координат вершины

Point pnt;

switch (drMode)

{

case DrawMode.ByPoint:

//Если нажата левая клавиша мыши

if (e.Button == MouseButtons.Left

{

if (PointsList.Count > 0) //Если есть хотя бы одна вершина

{

//Соединяем последнюю вершину с координатами курсора

g.DrawLine(pen, PointsList[PointsList.Count - 1], e.Location);

}

pnt = new Point(e.X, e.Y);//Создаем объект вершины

PointsList.Add(pnt); //Добавляем ее в список вершин

}

else //Если нажата правая клавиша мыши

{

if (PointsList.Count > 1) //Если есть хотя бы одна вершина

{

//Соединяем первую вершину с последней

g.DrawLine(pen, PointsList[0], PointsList[PointsList.Count - 1]);

}

// Очистка списка вершин с целью его подготовки к работе

PointsList.Clear();//со следующей фигурой

}

break;

//case DrawMode.Ribbon: break;

}

oldCursor.X = e.X;//Запоминаем горизонтальную

oldCursor.Y = e.Y;//и вертикальную координаты курсора

pen.Dispose(); //Освобождаем ресурсы пера

g.Dispose(); //Освобождаем ресурсы объекта Graphics

}

}

Такой способ организации реализации функции Form1_MouseDown с использованием оператора переключателя позволяет в последующем заставить эту же функцию формы, в зависимости от используемого режима, по разному реагировать на событие нажатия на клавишу "мыши". Причем делать это никак не затрагивая участков программного текста, реализующих реакцию этой же формы на это же событие, но в других режимах ее функционирования. Введение новой реакции на событие достигается простым введением в тело переключателя Switch нового раздела case:, например, case DrawMode.Ribbon: как это показано в закомментированной строке в нижней части тела оператора Switch Листинга 2.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: