Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_200309.doc
Скачиваний:
41
Добавлен:
24.12.2018
Размер:
4.38 Mб
Скачать

Событие KeyPress

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

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

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{

if (Char.IsLetter(e.KeyChar))

MessageBox.Show("Буква!!!");

}

Тип данных Char поддерживает несколько статических [Shared (static)] методов, удобных для проверки символов, переданных событием KeyPress:

• Char.IsDigit();

• Char.IsLetter();

• Char.IsLetterOrDigit();

• Char.IsPunctuation();

• Char.IsLower();

• Char.IsUpper().

Все они проверяют символы и возвращают булевы значения. Что проверяет каждый метод — легко догадаться по его имени.

Char.IsDigit возвращает true, если переданный ей символ является цифрой, и false в любом другом случае;

Char.IsLower возвращает true, если ее аргументом является буква в нижнем регистре, и false в противном случае; сходным образом работают остальные методы.

Работа с фокусом ввода

Объект, обладающий фокусом, способен получать пользовательский ввод, осуществляемый мышью или через клавиатуру. На форме может быть несколько элементов управления, но в каждый момент времени фокус ввода только у одного из них.

Элемент управления, обладающий фокусом, всегда находится на активной форме приложения. У каждого элемента управления есть метод Focus(), который передает фокус ввода вызвавшему его элементу управления. Метод Focus() возвращает булево значение, свидетельствующее об успешной или неудачной передаче фокуса. Деактивированные или невидимые элементы управления не получают фокус ввода. Определить, способен ли данный элемент управления получить фокус ввода, позволяет его свойство CanFocus: если оно возвращает true, элемент управления может получить фокус, а если falseнет.

Проверим, может ли элемент управления textBox1 получить фокус ввода и если может, то передадим ему фокус ввода и изменим его фон на зеленый.

private void button1_Click(object sender, EventArgs e)

{

if (textBox1.CanFocus == true)

{

MessageBox.Show("Yes!!!");

textBox1.Focus();

textBox1.BackColor = Color.Green;

}

}

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

1. Enter

1. Got Focus

3. Leave

4. Validating

5. Validated

6. LostFocus

События Enters, Leave генерируются, когда фокус переходит к элементу управления (но еще не получен им) и покидает его.

События GotFocus и LostFocus генерируются при получении и потере фокуса элементом управления. В принципе, эти события можно применять для проверки вводимых значений на уровне поля, однако события Validating и Validated лучше подходят для этой цели.

Проще всего проверить вводимые данные при помощи события Validating, генерируемого перед потерей фокуса элементом управления. Это событие генерируется, только если у элемента управления, который получит фокус следующим, свойство Causes Validation установлено в true. Поэтому, если значение элемента управления предполагается проверять при помощи события Validating, для элемента управления, который получит фокус следующим, свойство CausesValidation следует установить в true. Кроме того, использование события Validating требует, чтобы свойство CausesValidation у проверяемого элемента управления было установлено в true. У всех элементов управления, созданных во время разработки, свойство CausesValidation установлено в trite по умолчанию, обычно исключение составляет лишь кнопка Help.

Событие Validating позволяет выполнять довольно сложную проверку значений элементов управления. Обработчик этого события способен, например, проверять соответствие введенного значения некоторому весьма специфическому формату или запрещать передачу фокуса другому элементу управления, пока пользователь не введет какое-либо значение.

Событие Validating включает экземпляр CancelEventArgsкласса с единственным свойством Cancel. Если введенное значение не отвечает заданным параметрам, проверив свойство Cancel в обработчике события Validating, можно отменить дальнейшую обработку этого события и вернуть фокус исходному элементу управления.

private void textBox1_Validating(object sender, CancelEventArgs e)

{

if (textBox1.Text == "")

{

textBox1.BackColor = Color.Red;

MessageBox.Show("Значение не введено!!!");

e.Cancel = true;

}

}

Событие Validated генерируется после успешной проверки значения элемента управления и позволяет выполнить некоторые действия в зависимости от результатов проверки.

private void textBox1_Validated(object sender, EventArgs e)

{

MessageBox.Show("Операция успешно закончена!!!");

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]