Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №1 ТП.doc
Скачиваний:
6
Добавлен:
26.08.2019
Размер:
558.08 Кб
Скачать
      1. Событие KeyPress

Когда пользователь наживает клавишу, которой соответствует значение ASCII, генерируется событие KeyPress. К этим клавишам относятся все алфавитно-цифровые клавиши (a—z, A—Z, 0—9), а также ряд специальных клавиш, таких, как Enter и Backspace. Если при нажатии клавиши или их комбинации не генерируется ASCII-символ, событие KeyPress также не генерируется. К таким клавишам относятся клавиши-модификаторы Ctrl и Alt, а также все функциональные клавиши.

Это событие очень удобно для перехвата нажатия клавиш и проверки соответствующих символов. При генерации события KeyPress обработчик получает экземпляр класса KeyEventArgs, свойство KeyEventArgs.KeyCode которого содержит ASCII-символ клавиши, нажатие которой спровоцировало это событие. Чтобы проверить, например, была ли нажата цифра, достаточно проверить свойство KeyChar в обработчике события KeyPress.

      1. Пример использования события KeyPress - Проверка ввода в TextBox (ввод только определенных символов)

Иногда встает задача ограничивать возможность ввода в поле элемента Windows Forms - TextBox.

К примеру, мы хотим, что б данный контрол принимал от пользователя только числа. Скажу сразу, что для таких ситуаций предусмотрен контрол MaskedTextBox с его настраиваемой маской ввода. Но будем считать, что сегодня нас интересует только TextBox.

Кидаем на форму элемент TextBox;

Переходим в раздел событий вкладки Properties и подписываемся на событие KeyPress данного TextBox-а;

В сгенерированном обработчике события вставляем код:

public Form1()

{

InitializeComponent();

KeyPreview = true;

}

view plaincopy to clipboardprint?

private void myTextBox_KeyPress(

object sender, KeyPressEventArgs e)

{ if (e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57))

e.Handled = true; }

Обратите внимание на присутствие в условии сравнения кода вводимого символа с числом 8. Это дает возможность обрабатывать клавишу BackSpase. В итоге, не будут игнорироваться лишь нажатия клавиш цифр, BackSpase, ну и прочих вспомогательных (курсор, Delete ...).

И все таки, если вам требуется вводить лишь цифры (целочисленные числа), то как вариант возможно воспользоваться методом Char.IsDigit:

private void myTextBox_KeyPress( object sender, KeyPressEventArgs e)

{

if (!Char.IsDigit(e.KeyChar))

e.Handled = true;

}

      1. События KeyDown и KeyUp

Нажатие и освобождение любой клавиши сопровождается генерацией события KeyDown и KeyUp соответственно. Источником событий является элемент управления, обладающий фокусом ввода. Элемент управления, генерировавший событие, передает сведения о нажатой (или отпущенной) клавише (или сочетании клавиш) через экземпляр класса KeyEventArgs — класса, описывающего сочетание клавиш. В сигнатуре метода, обрабатывающего событие KeyDown или KeyUp, должен быть параметр типа KeyEventsArgs.

Чаще всего события KeyDown и KeyUp используют, чтобы определить, нажаты ли клавиши Alt, Ctrl или Shift. Результат передается обработчику соответствующего события через ссылку на экземпляр класса KeyEventArgs. Его свойства Alt, Ctrl и Shift возвращают значения типа Boolean, указывающие, были ли нажаты соответствующие клавиши. Значение true свидетельствует о том, что клавиша была нажата, а false — о том, что нет.

Ниже показан пример обработчика события KeyUp, проверяющего нажатие клавиши Alt:

private void textBox1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)

{

if(e.Alt == true)

{

MessageBox.Show("The Alt key still is down");

}

}

Свойство KeyEventArgs.KeyCode позволяет определить, какая именно клавиша спровоцировала событие. Это свойство возвращает код нажатой или отпущенной клавиши (соответственно при событиях KeyDown или KeyUp).

Ниже показан пример простого обработчика события, отображающего сообщение с кодом нажатой клавиши:

private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)

{

MessageBox.Show(e.KeyCode.ToString());

}