Рисование прямоугольников и эллипсов при помощи нажатия кнопки мыши
Листинг 28.1. Объявляем глобальные переменные и записываем наш код.
//Объявляем глобальные переменные для координат "x" и "y"
//указателя мыши в момент нажатия кнопки мыши:
public int x_MouseDown_1, y_MouseDown_1;
//Определяем координаты указателя в момент нажатия кнопки:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
x_MouseDown_1 = e.X;
y_MouseDown_1 = e.Y;
}
В панели Properties для элемента управления PictureBox на вкладке Events дважды щелкаем имя второго события MouseUp. Появляется шаблон метода pictureBox1_MouseUp для обработки события MouseUp в виде отпускания кнопки мыши. После записи нашего кода шаблон принимает следующий вид.
Листинг 28.2. Метод pictureBox1_MouseUp для обработки отпускания кнопки.
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
//Выбираем перо "myPen" черного цвета Black
//толщиной в 3 пикселя:
Pen myPen = new Pen(Color.Black, 3);
//Объявляем объект "g" класса Graphics и предоставляем
//ему возможность рисования на pictureBox1:
Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
//Рисуем прямоугольник:
g.DrawRectangle(myPen, x_MouseDown_1, y_MouseDown_1,
e.X - x_MouseDown_1, e.Y - y_MouseDown_1);
}
Чтобы удалить, в случае необходимости, то, что мы нарисовали, дважды щелкаем кнопку с надписью “1. Очистить панель” в режиме проектирования. Появляется шаблон метода button1_Click для обработки события в виде щелчка кнопки; этот шаблон после записи нашего кода принимает следующий вид.
Листинг 28.3. Метод button1_Click для стирания рисунка.
private void button1_Click(object sender, EventArgs e)
{
//Объявляем объект "g" класса Graphics
//и связываем его с pictureBox1:
Graphics g = pictureBox1.CreateGraphics();
//Очищаем (Clear) элемент pictureBox1 от рисунка
//и заполняем его белым цветом:
g.Clear(Color.White);
}
В режиме выполнения (Debug, Start Without Debugging) перемещаем указатель мыши в первую точку, нажимаем кнопку, перемещаем указатель мыши во вторую точку и отпускаем кнопку; при этом из предыдущей точки в данную точку рисуется прямоугольник. Аналогично строим еще несколько прямоугольников (рис. 28.1).
Если в коде на листинге 28.2 вместо строки для прямоугольника мы запишем
g.DrawEllipse(myPen, x_MouseDown_1, y_MouseDown_1,
e.X - x_MouseDown_1, e.Y - y_MouseDown_1);
то по этому второму варианту программы можем рисовать эллипсы (рис. 28.2) согласно алгоритму. После щелчка кнопки с надписью “1. Очистить панель” (или нажатия клавиши Enter, или Alt+1) то, что мы нарисовали, удаляется. И мы можем начать рисовать сначала.