Рисование линий при помощи нажатия кнопки мыши
Листинг 27.1. Объявляем глобальные переменные и записываем наш код.
//Объявляем глобальные переменные для координат "x" и "y"
//указателя мыши в момент 1-го и 2-го нажатий кнопки мыши:
public int x_MouseDown_1, y_MouseDown_1,
x_MouseDown_2, y_MouseDown_2;
//Чтобы рисование осуществлялось только после каждого щелчка
//кнопки,объявляем переключатель рисования
//в виде глобальной переменной OffOn:
bool OffOn = false;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
//Объявляем объект "g" класса Graphics
//и при помощи функции CreateGraphics
//предоставляем ему возможность рисования
//на this форме Form1:
Graphics g = this.CreateGraphics();
//Выбираем перо "myPen" красного цвета Red
//толщиной в 3 пикселя:
Pen myPen = new Pen(Color.Red, 3);
//Определяем координаты "x" и "y" указателя мыши
//в момент нажатия кнопки мыши:
x_MouseDown_2 = e.X;
y_MouseDown_2 = e.Y;
//Проверяем условие для переменной OffOn:
//Если переменная OffOn равна
//исходному значению false,
if (OffOn == false)
{
//то задаем координаты указателя мыши
//после первого нажатия кнопки мыши:
x_MouseDown_1 = x_MouseDown_2;
y_MouseDown_1 = y_MouseDown_2;
//Изменяем значение OffOn на противоположное:
OffOn = true;
}
else
{
//Если переключатель в виде переменной OffOn
//равен true, то рисуем линию между предыдущей
//и последующей позицией указателя мыши
//в момент нажатия кнопки мыши:
g.DrawLine(myPen, x_MouseDown_1, y_MouseDown_1,
x_MouseDown_2, y_MouseDown_2);
//Задаем предыдущей позиции указателя мыши
//координаты данной позиции указателя мыши:
x_MouseDown_1 = x_MouseDown_2;
y_MouseDown_1 = y_MouseDown_2;
}
}
Чтобы удалить, в случае необходимости, то, что мы нарисовали, дважды щелкаем кнопку с надписью “Очистить панель” в режиме проектирования. Появляется шаблон функции button1_Click для обработки события в виде щелчка этой кнопки. В тело шаблона записываем код из предыдущей главы для такой же функции, но с небольшим дополнением, как показано на следующем листинге.
Листинг 27.2. Метод button1_Click для стирания рисунка.
private void button1_Click(object sender, EventArgs e)
{
//Объявляем объект "g" класса Graphics:
Graphics g = this.CreateGraphics();
//Очищаем (Clear) клиентскую область Form1 от рисунка:
g.Clear(BackColor);
//Чтобы рисование осуществлялось только от позиции
//курсора на предыдущем щелчке до позиции курсора
//на данном щелчке кнопки мыши,задаем переключателю
//в виде глобальной переменной OffOn
//первоначальное значение:
OffOn = false;
}
В режиме выполнения (Debug, Start Without Debugging) мы можем рисовать при помощи щелчков кнопки мыши любой текст или фигуру, согласно алгоритму, как в качестве примера показано на рис. 27.1. После щелчка кнопки с надписью “Очистить панель” то, что мы нарисовали, удаляется. И мы можем начать рисовать сначала.