// Пример обработки событий, связанных с нажатием клавиш на клавиатуре, using System;
// Создать класс, производный от класса EventArgs и // хранящий символ нажатой клавиши.
class KeyEventArgs : EventArgs { public char ch;
}
public event EventHandler <KeyEventArgs> KeyPress;
// Этот метод вызывается при нажатии клавиши, public void OnKeyPress(char key) {
KeyEventArgs k = new KeyEventArgs();
if(KeyPress != null) { k.ch = key;
KeyPress(this, k) ;
}
}
}
// Продемонстрировать обработку события типа KeyEvent. class KeyEventDemo { static void Main() {
KeyEvent kevt = new KeyEvent();
ConsoleKeylnfo key; int count = 0;
// Использовать лямбда-выражение для отображения факта нажатия клавиши, kevt.KeyPress += (sender, е) =>
Console.WriteLine(' Получено сообщение о нажатии клавиши: ' + e.ch);
// Использовать лямбда-выражение для подсчета нажатых клавиш.
kevt.KeyPress += (sender, е) =>
count++; // count — это внешняя переменная
Console.WriteLine('Введите несколько символов. ' +
'По завершении введите точку.');
do {
key = Console.ReadKey(); kevt.OnKeyPress(key.KeyChar);
} while(key.KeyChar != '.');
Console.WriteLine('Было нажато ' + count + ' клавиш.');
}
}
Вот, например, к какому результату приводит выполнение этой программы.
Было нажато 5 клавиш.
В самом начале этой программы объявляется класс KeyEventArgs, производный от класса EventArgs и служащий для передачи сообщения о нажатии клавиши обработчику событий. Затем объявляется обобщенный делегат EventHandler, определяющий обработчик событий, связанных с нажатием клавиш. Эти события инкапсулируются в классе KeyEvent, где определяется событие KeyPress.
В методе Main () сначала создается объект kevt класса KeyEvent. Затем в цепочку событий kevt. KeyPress добавляется обработчик, предоставляемый лямбда-выражением. В этом обработчике отображается факт каждого нажатия клавиши, как показано ниже.
kevt.KeyPress += (sender, е) =>
Console.WriteLine(' Получено сообщение о нажатии клавиши: ' + e.ch);
Далее в цепочку событий kevt .KeyPress добавляется еще один обработчик, предоставляемый лямбда-выражением. В этом обработчике подсчитывается количество нажатых клавиш, как показано ниже.
kevt.KeyPress += (sender, е) =>
count++; // count — это внешняя переменная
Обратите внимание на то, что count является локальной переменной, объявленной в методе Main () и инициализированной нулевым значением.
Далее начинает выполняться цикл, в котором метод kevt.
