Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
46
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
      1. Подробности событий мыши. Класс MouseEventArgs

Мы с вами бесчисленное количество раз писали процедуру

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

и ни разу не заглядывали внутрь скобок. А видим мы там два параметра процедуры: один с именем sender, другой – e. Первый имеет тип Object и обозначает объект, с которым случилось событие, в нашем случае – Button1. Второй имеет тип EventArgs. Это некий общий тип для второго параметра и на нем мы останавливаться не будем. Рассмотрим лучше заголовки процедур для событий MouseDown, MouseUp и MouseMove. Например:

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _

Handles MyBase.MouseDown

События эти похожи и параметры у всех трех одинаковые. Мы уже сейчас можем извлечь пользу из параметра e, являющегося объектом класса MouseEventArgs. Польза от него та, что он содержит информацию о событии, например, какая кнопка мыши была нажата и какие у мыши в этот момент были координаты. Информация эта находится в нескольких свойствах объекта MouseEventArgs. Приведу те, что нас интересуют:

Свойства

Смысл

Тип значения

X, Y

Координаты острия курсора мыши в момент события

Integer

Button

Какая именно из кнопок мыши была нажата

Перечисление MouseButtons со значениями: Left (левая), Right (правая), Middle (средняя), None (никакая) и пара значений для пятикнопочной мыши.

Clicks

Равняется 0 (если не было щелчка), 1 (если был одинарный щелчок) или 2 (если был двойной щелчок).

Integer

Кроме этого класс MouseEventArgs поддерживает работу с колесом мыши.

Для того, чтобы понять и проверить смысл этих свойств, прочтите (чтобы понять) и запустите (чтобы проверить) такую программу:

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _

Handles MyBase.MouseDown

Debug.WriteLine(e.X & " " & e.Y) 'Печатаем координаты события

Debug.WriteLine(e.Button.ToString) 'Печатаем английское название кнопки

If e.Button = MouseButtons.Left Then Debug.WriteLine("Нажата левая кнопка мыши")

If e.Button = MouseButtons.Right Then Debug.WriteLine("Нажата правая кнопка мыши")

If e.Button = MouseButtons.Middle Then Debug.WriteLine("Нажата средняя кнопка мыши")

End Sub

Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseUp

Debug.WriteLine(e.X & " " & e.Y) 'Печатаем координаты события

Debug.WriteLine(e.Button.ToString) 'Печатаем английское название кнопки

If e.Button = MouseButtons.Left Then Debug.WriteLine("Отпущена левая кнопка мыши")

If e.Button = MouseButtons.Right Then Debug.WriteLine("Отпущена правая кнопка мыши")

If e.Button = MouseButtons.Middle Then Debug.WriteLine("Отпущена средняя кнопка мыши")

End Sub

Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _

Handles MyBase.MouseMove

Debug.WriteLine(e.X & " " & e.Y) 'Печатаем координаты события

Debug.WriteLine(e.Button.ToString) 'Печатаем английское название кнопки

If e.Button = MouseButtons.Left Then Debug.WriteLine("Удерживается нажатой левая кнопка мыши")

If e.Button = MouseButtons.Right Then Debug.WriteLine("Удерживается нажатой правая кнопка мыши")

If e.Button = MouseButtons.Middle Then Debug.WriteLine("Удерживается нажатой средняя кнопка мыши")

If e.Button = MouseButtons.None Then Debug.WriteLine("Не нажата ни одна кнопка мыши")

End Sub

Пояснения: Здесь я использовал свойственный объектам метод ToString, который возвращает в виде вразумительной строки имя или значение объекта.

Пощелкайте в разных местах формы всеми тремя кнопками мыши. Повозите мышь над формой, удерживая нажатой ту или иную кнопку. В окне Output вы будете наблюдать последовательность сообщений примерно такого вида:

264 24

None

Не нажата ни одна кнопка мыши

264 24

Left

Нажата левая кнопка мыши

337 83

Left

Удерживается нажатой левая кнопка мыши

337 83

Left

Отпущена левая кнопка мыши

341 83

None

Не нажата ни одна кнопка мыши

Пояснения здесь излишни.

Итоги. В тонкости я, конечно, не вникал, но полученной информации о мыши вполне достаточно для решения реальных задач.