Разработка программ для 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();

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, е) =>

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

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