// Пример обработки событий, связанных с нажатием клавиш на клавиатуре, using System;

// Создать класс, производный от класса EventArgs и // хранящий символ нажатой клавиши.

class KeyEventArgs : EventArgs { public char ch;

}

// Объявить класс события, связанного с нажатием клавиш на клавиатуре, class KeyEvent {

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.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату