Разработка программ для Windows, демонстрирующих такой подход, выходит за рамки этой главы, тем не менее, рассмотрим пример, дающий представление о принципе, по которому действует данный подход. В приведенной ниже програм ме создается обработчик событий, связанных с нажатием клавиш. Всякий раз, когда на клавиатуре нажимается клавиша, запускается событие KeyPress при вызове ме тода OnKeyPress. Следует заметить, что в этой программе формируются .NET- совместимые события и что их обработчики предоставляются в лямбда-выражениях. // Пример обработки событий, связанных с нажатием клавиш на клавиатуре. using System; // Создать класс, производный от класса EventArgs и // хранящий символ нажатой клавиши. class KeyEventArgs : EventArgs { public char ch; } // Объявить класс события, связанного с нажатием клавиш на клавиатуре. class KeyEvent { public event EventHandler 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; ConsoleKeyInfo 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 + " клавиш."); } }

Вот, например, к какому результату приводит выполнение этой программы. Введите несколько символов. По завершении введите точку. t Получено сообщение о нажатии клавиши: t е Получено сообщение о нажатии клавиши: е s Получено сообщение о нажатии клавиши: s t Получено сообщение о нажатии клавиши: t . Получено сообщение о нажатии клавиши: . Было нажато 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 и инициализированной нулевым значением.

Перейти на страницу:

Похожие книги