Урок 4.2: События клавиатуры
📌 Ключевые моменты этого урока:
- 3 события: KeyDown (клавиша нажата), KeyUp (отпущена), KeyPress (символ набран)
- KeyDown/KeyUp - для навигации и команд; KeyPress - для текстового ввода
- e.KeyCode используется в KeyDown/KeyUp; e.KeyChar в KeyPress
- Модификаторы (Ctrl, Shift, Alt) проверяются через e.Control, e.Shift, e.Alt
- Не используйте KeyPress для стрелок/функциональных клавиш - используйте KeyDown
KeyDown, KeyUp, KeyPress
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
// Клавиша нажата
if (e.KeyCode == Keys.Left)
{
x -= 10;
this.Invalidate();
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
// Клавиша отпущена
}
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
// Символ набран (только для печатных символов)
if (e.KeyChar == 'a')
{
// Действие
}
}KeyEventArgs
- KeyCode — код клавиши (Keys.Left, Keys.A, etc.)
- KeyData — полная информация о клавише
- Modifiers — модификаторы (Ctrl, Shift, Alt)
- Handled — обработано ли событие
Модификаторы (Ctrl, Shift, Alt)
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
// Проверка модификаторов
if (e.Control && e.KeyCode == Keys.S)
{
// Ctrl+S - сохранить
SaveFile();
}
if (e.Shift && e.KeyCode == Keys.Delete)
{
// Shift+Delete
}
if (e.Alt && e.KeyCode == Keys.F4)
{
// Alt+F4
}
}Практика: управление с клавиатуры
private int x = 100, y = 100;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
int step = e.Shift ? 20 : 10; // Shift = быстрее
switch (e.KeyCode)
{
case Keys.Left:
case Keys.A:
x -= step;
break;
case Keys.Right:
case Keys.D:
x += step;
break;
case Keys.Up:
case Keys.W:
y -= step;
break;
case Keys.Down:
case Keys.S:
y += step;
break;
}
this.Invalidate();
}
// Важно: установите KeyPreview = true для формы
this.KeyPreview = true;
Практическое задание
Задание: Управление с клавиатуры
- Создайте игру, где объект управляется стрелками или WASD
- Добавьте ускорение при удержании Shift
- Реализуйте обработку комбинаций клавиш (Ctrl+S для сохранения)
Проверка знаний
Ответьте на вопросы, чтобы проверить, насколько хорошо вы усвоили материал:
1. Какое событие возникает при нажатии клавиши?
2. Как проверить, нажата ли клавиша Ctrl?
3. Как проверить, нажата ли клавиша Ctrl?