Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
L09.doc
Скачиваний:
3
Добавлен:
01.09.2019
Размер:
77.31 Кб
Скачать

10

Лекция 9

4.5. Проверка данных, вводимых пользователем

Посредством интерфейса пользователи передают приложению необходимую для его работы информацию. Проверка данных является важным фактором защиты от некорректного ввода, а также способствует дружественности интерфейса пользователя. Для реализации такой проверки имеются свойства и события элементов управления, принимающих данные, а также методы передачи фокуса ввода. Более того, в стандартной библиотеке имеется специальный компонент – ErrorProvider, предназначенный для отображения сообщений с описанием допущенной пользователем ошибки.

Разработчик располагает двумя вариантами проверки вводимой информа­ции: на уровне поля и на уровне формы. На уровне поля данные проверяются для каждого поля в отдельности, по мере его заполнения. Проверка на уровне формы выполняется после того, как пользователь заполнит все ее поля. Предположим, что требуется заполнить имя, адрес и номер телефона. На уровне формы все перечисленные поля можно проверить одновременно, например, после нажатия кнопки ОК.

4.5.1. Проверка на уровне поля

4.5.1.1. Свойства, ограничивающие ввод

Иногда необходимо проверять данные сразу же после (или даже во время) их ввода. Чаще всего для приема данных от пользователя применяется элемент управления TextBox. Рассмотрим некоторые из его свойств, позволяющие ограничивать вводимые значения или их просмотр.

public int MaxLength;

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

public char PasswordChar;

Скрывает от посторонних глаз вводимое значение. Заданный символ отображается вместо вводимых пользователем символов. Это свойство обычно используется для защиты паролей. Независимо от назначенного символа, свойство Text содержит фактически введенное значение.

public bool ReadOnly;

Определяет, разрешено ли пользователю редактировать текстовое поле.

public bool MultiLine;

Задает, может ли поле ввода состоять из нескольких строк. Введенные строки сохраняются в виде строкового массива в наборе TextBox.Lines.

4.5.1.2. Клавиатурные события

Обработка клавиатурных событий на уровне поля позволяет немедлен­но проверять вводимые данные. Элементы управления, принимающие ввод с клавиатуры, генерируют следующие три события:

public delegate void System.Windows.Forms.KeyEventHandler (object sender,

KeyEventArgs e);

public delegate void System.Windows.Forms.KeyPressEventHandler (object sender,

KeyPressEventArgs e);

public event KeyEventHandler KeyDown, KeyUp;

public event KeyPressEventHandler KeyPress;

Нажатие и освобождение любой клавиши сопровождается генерацией события KeyDown и KeyUp соответственно. Источником событий является элемент управле­ния, обладающий фокусом ввода – текущий элемент. Он передает сведения о нажатой (или отпущенной) клавише (или сочетании клавиш) через экземпляр класса KeyEventArgs. События KeyDown и KeyUp часто используются для определения, нажаты ли клавиши Alt, Ctrl или Shift. Информация доступна обработчику в параметре e. Его свойства Alt, Ctrl и Shift возвращают значения типа bool, указывающие на нажатие соответствую­щих клавиш. Ниже показан пример обработчика события KeyUp, проверяющего нажатие клавиши Alt:

private void textBox1_KeyUp (object sender, KeyEventArgs e)

{

If (e.Alt) MessageBox.Show ("Нажата клавиша alt");

}

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

private void textBox1_KeyDown(object sender, KeyEventArgs e)

{

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

}

При нажатии символьной клавиши текущий элемент управления генерирует событие KeyPress. К таким клавишам относятся алфавитно-цифро­вые, а также ряд специальных (Enter, Backspace и др.). Если при нажатии клавиш не генерируется символ, событие KeyPress не происходит. К последним клавишам отно­сятся модификаторы Ctrl, Alt, Shift, а также функциональные клавиши. При генерации KeyPress обработчик получает экзем­пляр класса KeyPressEventArgs, свойство KeyChar которого содержит код соответствующего символа клавиши.

Как говорилось в п. 3.5, тип char поддерживает статические методы для проверки символов. Их можно применять в обработчике события KeyPress:

private void textBox1_KeyPress (object sender, KeyPressEventArgs e)

{

if ( char.IsDigit(e.KeyChar) ) MessageBox.Show ("Вы нажали клавишу с цифрой");

}

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

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

public bool Focus ();

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

public bool CanFocus;

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

public event EventHandler Enter, GotFocus, Leave;

public event CancelEventHandler Validating;

public event EventHandler Validated, LostFocus;

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

Удобнее проверять вводимые данные при помощи события Validating. Оно генерируется, если у элемента управления, который получит фокус следующим, свойство CausesValidation равно true. Кроме того, использование Validating требует, чтобы у самого проверяемого элемента свойство CausesValidation также было равно true. У всех элементов, созданных во время разработки, свойство CausesVali­dation установлено в true по умолчанию, исключение обычно составляет лишь кноп­ка Help.

Обработчик Validating может проверить соответствие введенного значения некоторому формату и при необходимости запретить передачу фокуса другому элементу управления. Для этого обработчику в качестве параметра передается экземпляр CancelEventArgs с булевым свойством Cancel (см. аналогию с событием формы Closing).

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

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

private void textBox1_Validating (object sender, CancelEventArgs e)

{

e.Cancel = (textBoxl.Text == "");

}

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