Огляд подій елементів управління для роботи з клавіатурою.
Теорія
Практикум
Підсумки
У цьому уроці ми обговоримо події клавіатури. Часто в комп’ютерну гру неможливо грати лише за допомогою миші. Багато ігор вимагають від користувача введення інформації або керування об’єктами за допомогою клавіатури.
Події клавіатури подібні до подій миші, оскільки для кожної натиснутої клавіші можна обробляти три різні події. Ви можете використовувати одну або декілька з цих подій залежно від потреб вашої програми.
KeyPress
Подія KeyPress запускається щоразу, коли користувач натискає та відпускає клавішу на клавіатурі
(подібно до події клацання мишею). Однак ця подія буде створена лише клавішами
символів на клавіатурі. Якщо користувач натисне "a", "p", "x" тощо, відбудеться подія KeyPress.
Якщо користувач натискає клавіші зі стрілками, пробіл або клавішу Tab, ця подія не відбудеться.
Не використовуйте цю подію, якщо ви намагаєтеся захопити одну із несимвольних клавіш!
KeyDown
Подія KeyDown запускається кожного разу, коли користувач натискає клавішу. На відміну від
події KeyPress, ця подія запускатиметься для кожної клавіші на клавіатурі, включно з несимвольними!
Ця подія корисна для відстеження, коли користувач утримує будь-яку несимвольну клавішу,
наприклад пробіл або клавішу Shift.
KeyUp
Подія KeyUp запускається кожного разу, коли користувач відпускає натиснуту клавішу. Як і
подія KeyDown, ця подія запускатиметься для кожної клавіші на клавіатурі, включно з
несимвольними. Наприклад, якщо користувач утримує пробіл, щоб стріляти в супротивника,
тоді подія KeyUp повідомить вам, що користувач більше не утримує цю клавішу, і ви
можете припинити стрілянину.
Подія KeyPress спрацює, лише якщо користувач натиснув клавішу символу
на клавіатурі. Символьні клавіші — це клавіші, які створюють читабельний символ.
Нечитабельні символи, як-от клавіша TAB і клавіші зі стрілками, не є символьними клавішами і не
призведуть до натискання клавіші!
Подібно до подій миші, усі ці обробники ключових подій мають параметр «e». Однак властивості
параметра «e» відрізняються для події KeyPress і подій KeyDown і KeyUp.
Обробник подій KeyPress додається до вашої програми так само, як ми додавали обробники подій Mouse. Спочатку ми повінні вибрати елемент, наприклад, Form1. Потім у переліку подій у другому полі зі списком автоматично відображатимуться всі події форми, включаючи події KeyDown, KeyPress, KeyUp.
Якщо ми виберемо подію KeyPress, виконаємо подвійне натискання у полі праворуч, вікно коду автоматично створює функцію події:
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
}
Параметр «e» для події KeyPress містить властивість KeyChar, яка містить значення символу клавіші, натиснутої на клавіатурі. Ви можете прочитати та зберегти це значення, щоб зробити щось пізніше, або ви можете виконати якусь негайну дію на основі натиснутої клавіші.
Важливо зауважити, що значення ключа, що зберігається в KeyChar, чутливе до регістру. Це означає, що Visual Studio розрізнятиме букви «f» у нижньому регістрі та «F» у верхньому регістрі, сприймаючи їх як два різні символи!
Ця функція обробника подій буде викликана кожного разу, коли користувач натисне клавішу символу на нашій формі. Тепер давайте додамо код до функції, щоб показати, як використовувати параметр e.KeyChar:
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show("Ви натиснули літеру: " + e.KeyChar);
}
Інструкція MessageBox.Show читає параметр e.KeyChar, щоб побачити, яку клавішу було
натиснуто. Якщо припустити, що ви натиснули клавішу "h", ви побачите вікно
повідомлення з цим символом -
Ви натиснули літеру: h
Події KeyDown і KeyUp мають інші властивості, ніж подія KeyPress. Ось список деяких
властивостей, які містить параметр "e" для цих подій:
e.Alt, e.Control, e.Shift (значення boolean)
Якщо будь-яка з цих логічних властивостей має значення true, це означає, що було натиснуто клавішу Alt, Control або Shift. Нуль, один або більше можуть мати значення true одночасно, якщо натиснуто декілька клавіш!
e.KeyCode
Ця властивість містить значення натиснутої клавіші. Коди клавіш — це попередньо визначені значення об’єкта Keys, по одному для кожної клавіші на клавіатурі. Наприклад, Keys.A представляє клавішу «A», а Keys.F — клавішу «F».
Зауважте, що властивість e.KeyCode для подій KeyDown і KeyUp НЕ збігається з властивістю e.KeyChar для події KeyPress. Параметр e.KeyCode не містить такого символу як "g", а має значення, які представляють натиснуту на клавіатурі клавішу. Об’єкт Keys дозволяє нам ідентифікувати клавіші через Keys, наприклад, клавіша Keys.Enter, Keys.Tab або клавіша Keys.Space.
Обробника подій KeyUp і KeyDown створюється так само, як обробник події KeyPress — за допомогою розкривних полів у вкладці подій.
Якщо ми створюємо обробник події KeyDown, автоматично буде створено таку функцію:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
}
Ця функція обробки подій буде викликана кожного разу, коли користувач натискає клавішу KeyDown на формі. Тепер ми можемо додати код до цієї функції, який показує, як використовувати параметри.
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("Ви натиснули клавішу: " + e.KeyCode.ToString());
}
Інструкція MessageBox.Showвикористовуватиме параметр e.KeyCode, щоб зчитувати, яку клавішу клавіатури натиснуто. Метод ToString() об’єкта KeyCode просто добре відформатує назву ключа для MessageBox.Show. Отримане вікно повідомлення виглядатиме так, якщо ви натиснете клавішу Tab:
Ви натиснули клавішу: Tab
Обробник події KeyUp ідентичний обробнику KeyDown. Єдина різниця, як ви вже здогадалися, полягає в тому, коли викликаються дві події. Обробник події KeyDown викликається щоразу, коли клавішу натискають, а KeyUp викликається, коли його знову відпускають.
Увага! На відео крім матеріалу, описаному вище, я ще розказую про властивість KeyPreview. Ця властивість важлива, якщо ви хочете написати обробникі події клавіатури, а на формі є елементи, які реагують на натискання клавіш.
Створіть новий проект.
Створіть у Form1 обробники подій KeyPress, KeyDown:
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show("Ви натиснули літеру: " + e.KeyChar);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("Ви натиснули клавішу: " + e.KeyCode.ToString());
}
Перевірте роботу програми.
Після вивчення матеріалів уроку ви повинні надати звіт (заповнити просту форму).