Программирование >>  Программирование с использованием ajax 

1 ... 141 142 143 [ 144 ] 145 146 147 ... 396


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

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

Замените оператор throw в обработчике события, сгенерированном программой Visual Studio, следующим кодом:

private void textBoxEmpty Validating (object sender.

System.ComponentModel.CancelEventArgs e)

Нам известно, что отправитель - объект TextBox,

поэтому мы приводим объект-отправитель к этому типу.

TextBox tb = (TextBox)sender;

Если текст пуст, мы устанавливаем красный цвет фона

элемента управления Textbox, чтобы указать на наличие проблемы.

Для указания того, содержит ли элемент управления допустимую

информацию, мы используем свойство Tag элемента управления.

if (tb.Text.Length == 0)

tb.BackColor = Color.Red; tb.Tag = false;

В данном случае отмена дальнейшей обработки не требуется, но если бы это потребовалось, нужно было бы добавить следующую строку: е.Cancel = true;

else {

tb.BackColor = System.Drawing.SystemColors.Window; tb.Tag = true;

И, наконец, мы вызываем функцию ValidateOK, которая будет устанавливать значение кнопки ОК. ValidateOKО;

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

TextBox tb = (TextBox)sender;

Если длина текста в текстовом поле равна нулю, цвет фона нужно установить красным, а значение свойства Tag равным false. В противном случае в качестве цвета фона устанавливается стандартный цвет окна Windows.

Для установки стандартного цвета в элементе управления всегда следует использовать цве та, определенные в перечислении System, Drawing, SystemColors. Если просто установить цвет белым, приложение будет выглядеть странно в случае изменения пользователем заданных по умолчанию цветовых настроек.



Описание функции ValidateOK () приведено в конце этого примера. Следующий обработчик события Validating, который нужно добавить, предназначен для текстового поля Occupation (Профессия). Процедура добавления полностью аналогична описанной для двух предыдущих обработчиков, но код проверки допустимости отличается, поскольку, чтобы быть допустимым значение профессии должно быть Programmer (Программист), либо пустой строкой. Поэтому добавим в конструктор новую строку:

this.textBoxOccupation.Validating += new System.ComponentModel.CancelEventHandler (this.textBoxOccupation Validating) ;

Теперь можно добавить сам обработчик:

private void textBoxOccupation Validating (object sender.

System.ComponentModel.CancelEventArgs e)

Приведение объекта-отправителя к типу textbox. TextBox tb = (TextBox)sender;

Проверка правильности значений.

if (tb.Text.CompareTo( Programmer ) == 0 tb.Text.Length 0) {

tb.Tag = true;

tb.BackColor = System.Drawing.SystemColors.Window;

else {

tb.Tag = false;

tb.BackColor = Color.Red;

Установка состояния кнопки ОК. ValidateOK О;

Предпоследняя задача, которую остается решить - предоставление обработчика для текстового поля Age (Возраст). Необходимо, чтобы пользователи вводили только положительные числа (включая О, для упрощения проверки). Для этого мы используем событие Key Press для удаления любых нежелательных символов до того, как они будут отображены в текстовом поле. Мы ограничим также количество символов, которые могут быть введены в элемент управления, тремя.

Вначале установите значение MaxLength элемента управления textBoxAge равным 3. Затем подпишитесь на событие Key Press посредством двойного щелчка на событии KeyPress в списке Events окна Properties (выберите список Events, щелкнув на пиктограмме молнии). Обработчик события KeyPress также является специализированным. Мы предоставляем обработчик System. Windows . Forms .KeyPressEventHandler, поскольку событие нуждается в информации о нажатой клавише.

В сам обработчик события нужно добавить следующий код:

private void textBoxAge KeyPress (object sender, KeyPressEventArgs e) {

if ((e.KeyChar < 48 I I e.KeyChar > 57) && e.KeyChar != 8) e.Handled = true; Удаление символа

ASCII-значения для символов от О до 9 лежат в диапазоне от 48 до 57, поэтому нужно удостовериться, что введенный символ относится к этому диапазону - за одним исключением. ASCII-значение символа 8 представляет клавишу забоя, и в целях упрощения редактирования это поведение следует оставить без изменения. Установка значения свойства Handled объекта KeyPressEventArgs равным true указывает элементу управ-



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

На данный момент элемент управления не помечен как недопустимый или допустимый. Это связанно с тем, что для определения того, было ли что-то введено в элементе управления, требуется выполнение еще одной проверки. Это не представляет сложности, поскольку метод для выполнения такой проверки уже создан. Просто подпишитесь на событие Validating для элемента управления Age, добавив в конструктор следующую строку:

this.textBoxAge.Validating += new

System.ComponentModel.CancelEventHandler(this.textBoxEmpty Validating);

Остается решить всего одну задачу. Если пользователь вводит допустимый текст во все текстовые поля, а затем вносит какие-то недопустимые изменения, кнопка ОК остается активизированной. Поэтому необходимо добавить последний обработчик события для всех текстовых полей: обработчик события Change, который будет отключать кнопку ОК, если любое текстовое поле содержит недопустимые данные.

Событие TextChanged происходит при каждом изменении текста в текстовом поле. Подписка на событие выполняется посредством выбора всех четырех описанных текстовых полей и ввода имени textBoxTextChanged в списке Events. Это ведет к назначению единого обработчика для всех четырех событий.

Событие TextChanged использует стандартный обработчик события, известный по событию Click. Наконец, добавьте само событие:

private void textBox TextChanged(object sender. System.EventArgs e) {

Приведение объекта-отправителя к типу Textbox. TextBox tb = (TextBox)sender;

Проверка допустимости данных и установка значения свойства tag и цвета фона соответствующим образом, if (tb.Text.Length == О && tb != textBoxOccupation) {

tb.Tag = false; tb.BackColor = Color.Red;

else if (tb == textBoxOccupation &&

(tb.Text.Length != 0 && tb.Text.СотрагеТо( Programmer ) != 0))

He следует устанавливать цвет здесь, поскольку во время ввода данных пользователем цвет будет изменяться. tb.Tag = false;

else {

tb.Tag = true;

tb.BackColor = SystemColors.Window;

Вызов функции ValidateOK для установки состояния кнопки ОК. ValidateOKО;

На этот раз необходимо точно выяснить, какой элемент управления вызывает обработчик события, поскольку нежелательно, чтобы цвет фона текстового поля Occupation изменялся на красный, когда пользователь начинает вводить данные. Это достигается посредством проверки свойства Name текстового поля, которое было передано в параметре sender.



1 ... 141 142 143 [ 144 ] 145 146 147 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика