- •Лабораторна робота №7. Тема: Робота з мишкою і клавіатурою
- •Теоретичні відомості
- •Фокус елементів управління
- •Події отримання і втрати фокусу
- •Надаємо фокус у коді.
- •Якщо зламалася мишка
- •Подробиці подій миші. Клас MouseEventArgs
- •Приклади використання деяких подій миші
- •Події KeyDown і KeyUp. Клас KeyEventArgs
- •Приклади використання деяких подій клавіатури
- •Варіанти індивідуальних завдань
Події KeyDown і KeyUp. Клас KeyEventArgs
При натисканні майже будь-якої клавіші клавіатури спрацьовує подія KeyDown. Якщо при цьому натискання приводить до введення символу, то відразу за ним спрацьовує подія KeyPress. Якщо ви утримуєте клавішу, ця парочка спрацьовує багато разів і часто. При відпусканні клавіші одноразово спрацьовує подія KeyUp. Ми не розглядаємо ситуацію, коли одночасно утримуються натиснутими дві і більше клавіш.
KeyCode. Які саме клавіші клавіатури були натиснуті або відпущені, вам підкаже властивість KeyCode об'єкта e, що належить класу KeyEventArgs. Введіть такий код:
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e KeyEventArgs) Handles MyBase.KeyDown
Debug.WriteLine(e.KeyCode.ToString)
End Sub
Запустіть проект, пройдіться по всіх клавішах клавіатури (крім тих, звичайно, що вимикають комп'ютер). Ось що ви побачите:
-
Друк у вікні Output
Яка клавіша була натиснута
D
L
F1
Tab
Enter
Left
Space
D1
D2
Escape
ControlKey
ShiftKey
Menu
D
L
F1
Tab
Enter
Стрілка вліво
Пробіл
Цифра 1
Цифра 2
Esc
Ctrl
Shift
Alt
Властивості Control, Alt, Shift. VB дозволяє визначити, які з трьох клавіш Ctrl, Alt, Shift утримувалися натиснутими у момент спрацьовування події KeyDown або KeyUp. Доповніть процедуру:
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
Debug.WriteLine(e.KeyCode.ToString & " " & e.Control & " " & e.Alt & " " & e.Shift)
End Sub
Тут використано властивості Control, Alt, Shift об'єкта e. Їхній зміст буде зрозуміоий з роздруківки у вікні Output. Запустіть проект, натисніть і утримуйте клавіші Alt і Shift (але не Ctrl), після чого клацніть по клавіші W. Ось що ви побачите останнім надрукованим рядком у вікні Output:
W False True True
Все сказане стосується і події KeyUp.
Аналізувати натиснення клавіш для управління комп'ютером можна, приміром, такими операторами:
If e.KeyCode = Keys.F2 Then Debug.WriteLine("Натиснута клавіша F2")
If e.Shift Then Debug.WriteLine("Натиснута клавіша Shift")
If e.Control And e.KeyCode = Keys.Right Then Debug.WriteLine("Натиснута стрілка направо при натиснутій клавіші Ctrl")
Перерахування Keys включає в себе коди клавіш клавіатури.
Події клавіатури у елементів управління. Події, пов'язані з клавіатурою, є в багатьох елементів управління. Помістимо на форму, наприклад, пару кнопок і текстове поле. До того ж до процедури Form1_KeyDown напишемо три процедури:
Private Sub Button1_KeyDown …
Private Sub Button2_KeyDown …
Private Sub TextBox1_KeyDown …
Запустимо програму і клацнемо по якій-небудь клавіші. Яка з чотирьох процедур спрацює? Та, чий елемент управління знаходиться у фокусі. А оскільки один який-небудь елемент на формі завжди знаходиться у фокусі, до процедури Form1_KeyDown справа ніяк не доходить. Це не завжди буває зручно. І проти цього в VB є спеціальний прийом: властивість форми KeyPreview встановлюється в True. Це означає наказ комп'ютера при натисканні на клавішу спочатку викликати подію форми, а вже потім іншого об'єкта. Так, якщо у фокусі знаходиться кнопка 2, то при натисканні на клавішу клавіатури спочатку виконується процедура Form1_KeyDown, а відразу за нею - Button2_KeyDown. Сказане стосується більшості клавіш і елементів управління, але не всіх.