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

В Error: Reference source not found мы познакомились с некоторыми событиями, возникающими при работе с мышью. Пришла пора расширить и углубить наше знакомство.

      1. Основные события, связанные с мышью

Создадим проект с кнопкой. Зайдем в окно кода и заглянем в события, связанные с формой. Среди них отыщем события, относящиеся к мыши. Нас интересуют такие: Click (щелчок), DoubleClick (двойной щелчок), MouseDown (нажали клавишу мыши), MouseUp (отпустили клавишу мыши), MouseEnter (мышь появилась над формой), MouseLeave (мышь покинула форму), MouseMove (сдвинули мышь).

Проверим работу этих событий, для чего введем такой код:

Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click

Debug.WriteLine("Сработало событие Click")

End Sub

Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.DoubleClick

Debug.WriteLine("Сработало событие DoubleClick")

End Sub

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) _

Handles MyBase.MouseDown

Debug.WriteLine("Сработало событие MouseDown")

End Sub

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

Debug.WriteLine("Сработало событие MouseUp")

End Sub

Private Sub Form1_MouseEnter(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.MouseEnter

Debug.WriteLine("Сработало событие MouseEnter")

End Sub

Private Sub Form1_MouseLeave(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.MouseLeave

Debug.WriteLine("Сработало событие MouseLeave")

End Sub

Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) _

Handles MyBase.MouseMove

Debug.WriteLine("Сработало событие MouseMove")

End Sub

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

MouseMove. Это событие возникает, как только мы сдвигаем мышку с места, а во время движения мыши оно возникает постоянно и очень часто. Чиркнем мышкой по экрану через всю форму. Вот цепочка событий::

Сработало событие MouseEnter

Сработало событие MouseMove

Сработало событие MouseMove

Сработало событие MouseMove

Сработало событие MouseMove

Сработало событие MouseMove

Сработало событие MouseMove

Сработало событие MouseLeave

Click. Теперь о щелчках. Вот цепочка событий при щелчке:

Сработало событие MouseDown

Сработало событие Click

Сработало событие MouseUp

Сработало событие MouseMove

Опуская подробности и тонкости, можно сказать, что при щелчке возникает сразу несколько событий, причем сначала – MouseDown, затем – Click, а за ним – MouseUp. Это очевидно, так как любой щелчок – это не что иное, как нажатие и отпускание. Обратите внимание, что после события MouseUp наступает событие MouseMove, несмотря на то, что мы можем удерживать мышку неподвижно. Вот это уже не столь очевидно, но спорить с этим не приходится: не мы авторы VB.

DoubleClick. При двойном щелчке наступает еще больше событий. Вот их цепочка:

Сработало событие MouseDown

Сработало событие Click

Сработало событие MouseUp

Сработало событие MouseMove

Сработало событие MouseDown

Сработало событие DoubleClick

Сработало событие MouseUp

Сработало событие MouseMove

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

Это задание маленькое, но решение его совсем не очевидно, так что не грех и в ответ заглянуть. Поместите на форму две кнопки и текстовое поле. Нажимая клавишей Enter первую кнопку, вы должны в текстовом поле увидеть сообщение компьютера о том, находится ли в этот момент мышка над второй кнопкой. При любом сдвиге мыши над формой сообщение должно пропадать.