13/ Робота з мишкою
Основні події пов’язані з мишкою
Більшість елементів управління має вбудовану підтримку для введення з використанням миші. Тому для цього не потрібне написання окремої програми. Іноді від елементу управління може знадобитися більший набір функцій, ніж він підтримує. У Visual Basic є 8 подій, які дозволяють керувати введенням з миші безпосередньо. Вони перераховані в порядку появи в таблиці:
Назва події |
Опис |
Click |
Відбувається, коли натиснуто елемент управління |
DoubleClick |
Відбувається при подвійному натисненні елементу управління |
MouseEnter |
Відбувається, коли покажчик миші попав на елемент управління |
MouseMove |
Відбувається, коли покажчик миші рухається над елементом управління |
МouseHover |
Відбувається, коли покажчик миші зупиняється над елементом управління |
MouseDown |
Відбувається, коли покажчик миші знаходиться над елементом управління і при цьому натиснута кнопка миші (будь-яка) |
MouseUp |
Відбувається, коли покажчик миші знаходиться над елементом управління і при цьому відпускається кнопка миші(будь-яка) |
MouseLeave |
Відбувається, коли покажчик миші покидає елемент управління |
Подробиці подій миші. Клас 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
Поклацайте в різних місцях форми всіма трьома кнопками миші. Рухайте мишею над формою, утримуючи ту чи іншу кнопку. У вікні Output ви будете спостерігати послідовність повідомлень приблизно такого вигляду:
264 24
None
Жодна кнопка не натиснута
264 24
Left
Натиснуто ліву кнопку миші
337 83
Left
Утримується натиснутою ліва кнопка миші
337 83
Left
Відпущено леву кнопку миші
341 83
None
Жодна кнопка не натиснута
Приклад 3. У наступному прикладі при проходженні вказівника миші над кнопкою Button відбувається зміна кольору кнопки і тексту в елементі TextBox.
Private Sub Buttonl_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
Button1.BackColor = Color.Red
TextBox1.Text = "вказівник миші"
End Sub
Private Sub Buttonl_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseLeave
Button1.BackColor = Color.LightBlue
TextBox1.Text = ""
End Sub
