Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_7.docx
Скачиваний:
3
Добавлен:
10.07.2019
Размер:
106.53 Кб
Скачать

Події 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. Сказане стосується більшості клавіш і елементів управління, але не всіх.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]