Создание Windows-приложений на основе Visual C#

         

Проверка вводимых значений. События KeyPress и Validating элемента управления TextBox


При внесении значений параметров пользователем или заполнении регистрационной формы требуется проверять вводимый текст по заданным критериям. Например, регистрационный номер не должен содержать букв. Рассмотрим проверку, которую можно осуществлять, используя встроенные события текстового поля. Скопируйте папку приложения RegistrationForm и дайте ей новое название — ValidatingInput. Запускаем проект. Текстовым полям, находящимся напротив надписей Name и PIN, задаем названия (значения свойства Name) — txtName и txtPIN соответственно. Располагаем на форме новую надпись lbloutput – на нее будут выводиться сообщения об ошибках, поэтому значение свойства Text оставляем пустым. Выделяем поочередно текстовые поля и в окне Properties создаем обработчиков события KeyPress, возникающего при нажатии любой клавиши в поле. Для элемента txtName недопустимыми значениями будут цифры:

private void txtName_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if (char.IsDigit(e.KeyChar) ) { e.Handled = true; lbloutput.Text = "Поле Name не может содержать цифры"; }

}

Для элемента txtPIN, наоборот, недопустимыми значениями будут буквы:

private void txtPIN_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if (!char.IsDigit(e.KeyChar) ) { e.Handled = true; lbloutput.Text ="Поле PIN не может содержать буквы"; }

}

Запускаем приложение. При попытке ввести недопустимое значение в одно из полей появляется сообщение, а клавиатура блокируется. Даже стандартная кнопка закрытия формы не работает, пока не будут внесены исправления.

Для текстового поля, появляющегося при установки галочки в чекбоксе "Расширенные возможности", необходимо вручную определить событие KeyPress:

private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { … txt.KeyPress+= new System.Windows.Forms.KeyPressEventHandler(this.txtPIN_KeyPress); }

Запускаем приложение. Теперь проверяются значения и в появляющемся поле PIN2 (рис. 3.9).


Рис. 3.9.  Проверка значений поля PIN2. Текст сообщения, появляющегося при ошибке, был изменен

Событие KeyPress блокирует часть клавиатуры. Другим способом проверки является событие Validating, позволяющее работать с клавиатурой, но блокирующее другие действия пользователя. Закомментируем обработчик txtPIN_KeyPress, переключимся в режим дизайна формы и в окне Properties элемента txtPIN создадим обработчик события Validating:

private void txtPIN_Validating(object sender, System.ComponentModel.CancelEventArgs e) { if(txtPIN.Text =="") { e.Cancel=false; } else { try { double.Parse(txtPIN.Text); e.Cancel = false;

} catch { e.Cancel = true; lbloutput.Text ="Поле PIN не может содержать буквы"; } } }

Для проверки введенное значение преобразуется к типу double — текст сгенерирует исключение. Запускаем приложение. При переключении фокуса ввода или нажатии на кнопку "регистрация" происходит событие Validating.

На диске, прилагаемом к книге, вы найдете приложение ValidatingInput (Code\Glava3\ ValidatingInput).



Содержание раздела