Урок 16 windows forms. Работа с мышью

Лабораторные работы си шарп. Работа с мышью

Приложения для Windows forms

Лабораторная работа 16

Выполнить: Разработайте приложение «Графический редактор», в котором инструменты не будут похожи на инструменты стандартного графического редактора Paint.

Пример выполнения:

[Название проекта: Lesson_16Lab1, название файла L16Lab1.cs]

✍ Выполнение:

1. Для вывода графического изображения будем использовать саму форму. Первый инструмент, который мы создадим, будет квадрат, т.е. при перемещении указателя мыши на форме под курсором будет рисоваться квадрат.
2. Для этого необходимо запрограммировать событие MouseMove (перемещение мыши) для формы. Активируйте объект формы, чтобы просмотреть окно свойств и событий. В окне свойств переключитесь на окно событий: а затем из списка событий выберите пункт MouseMove, дважды щелкните по нему. В коде программы появится описание процедуры:

private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
 
        }

3. Теперь опишем необходимые переменные для создания изображений:

   	    Graphics myg = this.CreateGraphics();// создаем холст для рисования
            int CursorX = Cursor.Position.X; // координата X курсора мыши
            int CursorY = Cursor.Position.Y; // координата Y курсора мыши
            Color myColor = Color.FromArgb(100, Color.Red);// Задаем цвет
            SolidBrush myb = new SolidBrush(myColor); // переменная инструмента Кисть
Класс Graphics предоставляет методы для вывода объектов в устройстве отображения. Объект Graphics связан с конкретным контекстом устройства (this — то есть текущий объект-форма). Используя объект Graphics, можно нарисовать много разных фигур и линий.
SolidBrush – класс, определяющий кисть одного цвета. Кисти используются для заливки графических фигур, таких как прямоугольники, эллипсы, круги, многоугольники и контуры. Этот класс не наследуется.
Color.FromArgb – используется для создания цвета системы Argb, где первый аргумент – прозрачность (от 0 – прозрачный до 100 — непрозрачный).
Cursor.Position.X и Cursor.Position.Y — для распознания текущего положения курсора.

4. Теперь введем процедуру, рисующую прямоугольник высотой и шириной 10 пикселей, с координатами X и Y курсора мыши. Цвет прямоугольника зависит от значения переменной myb:

Rectangle myrect = new Rectangle(CursorX, CursorY, 10, 10); // создаем квадратик, связываем его с координатами мыши
где myb – наша кисть для заливки красного цвета, CursorX, CursorY – горизонтальная и вертикальная координаты курсора мыши для задания верхней левой точки прямоугольника, 10, 10 – заполнение области прямоугольника.

5. Осталось нарисовать прямоугольник на холсте:

myg.FillRectangle(myb, myrect); // рисуем квадрат кистью на холсте

6. Запустите приложение и поводите мышкой по форме. Под курсором рисуется квадрат. Но в данном случае мы не управляем процессом вывода. Необходимо, чтобы мы могли подавать команды для начала и окончания рисования квадрата. Самый удобный способ – это подавать данные команды мышью, к примеру, чтобы квадрат рисовался при нажатой левой клавише мыши.
7. Для этого в начале модуля формы (перед кодом public Form1()) необходимо описать переменную КнопкаНажата логического типа.

bool КнопкаНажата;

8. Затем необходимо запрограммировать два события для формы (выбирая их в списке событий формы): когда кнопка мыши опускается вниз (MouseDown), и когда кнопка мыши поднимается вверх (MouseUp):

private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            КнопкаНажата = true;    
   }

9. Теперь осталось в событии перемещения мыши добавить условный оператор, благодаря которому прямоугольники рисуются только в случае, если переменная КнопкаНажата имеет значение True:

if (КнопкаНажата==true) {
                myg.FillRectangle(myb, myrect); // рисуем квадрат кистью на холсте
             }

10. Для выполнения дополнительного задания добавим на нашей форме меню (menuStrip), назовем его Инструменты, в котором будут перечисляться созданные графические инструменты. Вызывать тот или иной инструмент можно при помощи переменных, описанных в глобальной области формы (или создайте модуль формы для этих целей):

bool ИнструментКвадрат;
bool ИнструментЭллипс;

11. В событии Click каждого пункта меню добавьте необходимый код. К примеру, для пункта Квадрат:

ИнструментКвадрат = true;
ИнструментЭллипс = false;

12. В описание MouseMove следует также добавить дополнительные условия. Для рисования квадрата:

if (КнопкаНажата==true && ИнструментКвадрат == true)
            {
                myg.FillRectangle(myb, myrect); // рисуем квадрат кистью на холсте
 }
Контрольное задание:
1. Добавьте инструмент Эллипс (FillEllipse)
myg.FillEllipse(Brush, Int, Int, Int, Int) — заполняет внутреннюю часть эллипса, определяемого ограничивающим прямоугольником, заданным с помощью пары координат (в нашем случае координаты курсора), ширины и высоты.
2. Добавьте в меню пункт Цвет для выбора цвета.
Вопросы для самоконтроля:
1. Когда генерируется событие MouseMove?
2. Когда генерируется событие MouseDown и MouseUp?