Книга: Программирование мобильных устройств на платформе .NET Compact Framework

Пример элемента управления TextBox с фильтром

Пример элемента управления TextBox с фильтром

Если при вводе данных должны быть выдержаны определенные требования форматирования, то часто оказывается полезным создать пользовательский элемент управления, который вынуждает соблюдать необходимые критерии. В качестве типичного для США примера можно привести ввод номера карточки социального страхования. Эти номера имеют формат ###-##-####, представляющий три цифры, разделитель в виде дефиса, за которым следуют еще две цифры, дефис и последние четыре цифры. Существует много других случаев, когда навязывание формата ввода данных оказывается полезным, например, почтовые коды (ZIP-коды). В разных странах предусмотрены свои форматы кодов, одни из которых — цифровые, а другие — буквенно-цифровые. Так, в почтовые коды Канады и Великобритании входят как цифры, так и буквы. Во всех подобных случаях, когда требуется строго определенный ввод, возможность включения фильтра в элемент управления TextBox представляет большую ценность. Было бы очень кстати, если бы у этого элемента управления было свойство, позволяющее информировать пользователя о том, соответствует ли введенный в настоящее время текст требованиям определения достоверного и завершенного ввода. В нашем примере кода будет реализована как фильтрация входных данных, так и проверка их достоверности.

На рис. 13.9 показано, как выглядит приложение во время выполнения. Имеющаяся на форме кнопка предназначена для создания экземпляра элемента управления TextBox с фильтром.


Рис. 13.9. Текстовое окно с фильтрацией во время выполнения

Ввод текста в текстовом окне приводит к запуску кода фильтрации и форматирования, предусмотренного для этих целей в классе SocialSecurityTextBox. В этом классе вызываются две функции:

1. Первой из вызываемых функций является перекрытый метод SocialSecurityTextBox.OnKeyPress(). Это дает нам возможность перехватывать и осуществлять предварительную фильтрацию поступающих событий нажатий клавиш. В нашем случае, поскольку мы не хотим, чтобы среди входных данных присутствовали буквы, мы должны отфильтровывать соответствующие символы при их вводе пользователем. Благодаря тому, что мы не передаем их методу OnKeyPress() базового класса, текстовое окно вообще "не видит" нажатий этих клавиш. Мы могли бы использовать более строгие критерии фильтрации, исключив, например, любой возможный дополнительный цифровой ввод, который пользователь пытался бы выполнить после ввода обязательных цифр, однако не будем усложнять этим пример. Стоит подчеркнуть, что при фильтрации событий нажатий клавиш необходимо следить за тем, чтобы не переусердствовать и не потерять при этом нажатия таких клавиш, как символ забоя, который используется для удаления предыдущего символа.

2. Второй из вызываемых функций является перекрытый метод SocialSecurity — TextBox.OnTextChanged(). Этот метод вызывается тогда, когда содержимое свойства Text претерпевает изменения, например, когда было зарегистрировано нажатие клавиши. При этом у нас появляется возможность применить наш форматирующий код и принудительно согласовать любой введенный текст с определенным нами форматом. Из введенных символов мы оставляем лишь цифры, одновременно гарантируя наличие символов дефиса (-) между третьей и четвертой, а также пятой и седьмой по счету цифрами. При этом следует предпринять некоторые меры предосторожности, ибо если будет происходить обновление свойства Text текстового окна внутри метода OnTextChanged, то это приведет к тому, что наш метод OnTextChanged будет вызываться рекурсивно. В данном случае нам не нужны осложнения, поэтому в самом начале функцию мы проверяем, не является ли данный вызов рекурсивным, и если это так, то осуществляется выход из функции без выполнения каких-либо действий. Далее мы проверяем длину обрабатываемого текста; если она составляет 11 символов, то номер карточки социального страхования получен полностью, иначе — нет. Для указания этого факта используется обновление внутреннего состояния. Наконец, мы вызываем метод OnTextChanged нашего базового класса текстового окна; в результате этого будут вызываться все обработчики событий, прослушивающие события TextChanged.

Приведенный в листинге 13.3 код представляет собой независимый класс, и его можно ввести в том виде, как он есть. Код, приведенный в листинге 13.4, принадлежит форме проекта Pocket PC. Для создания и запуска приложения необходимо выполнить следующие действия:

1. Запустите Visual Studio .NET (2003 или более позднюю версию) и выберите в качестве типа приложения C# Smart Device Application.

2. Выберите в качестве целевой платформы Pocket PC. (Для вас будет автоматически создан проект, и на экране появится окно конструктора форм Pocket PC.)

3. Добавьте в форму элемент управления Button. (Ему будет присвоено имя button1.)

4. Добавьте в форму элемент управления Label. (Ему будет присвоено имя label1.)

5. Добавьте в проект новый класс. Присвойте ему имя SocialSecurityTextBox, удалите весь предшествующий код, который отображается в окне текстового редактора для этого класса, и введите код, представленный в листинге 13.3.

6. Вернитесь к форме Form1 в окне конструктора форм.

7. Дважды щелкните на кнопке, которую вы добавили в окне конструктора форм. На экране отобразится окно редактора кода вместе со скелетом функции private void button1_Click(object sender, System.EventArgs е).Введите в эту функцию ее код, представленный в листинге 13.4.

8. Перейдя в окно редактора кода, введите оставшуюся часть приведенного ниже кода, включая те его части, которые расположены выше и ниже кода функции, который вы только что ввели.

9. Установите для свойства MinimizeBox формы значение false. Благодаря этому во время выполнения в верхней правой части формы появится кнопка OK, с помощью которой легко сможете закрыть форму и выйти из приложения. Эта возможность оказывается очень полезной при многократном тестировании приложения.

10. Запустите приложение. Вы должны заметить, что после щелчка на кнопке button1 в верхней части формы появляется новое текстовое окно. Это текстовое окно разрешает вводить лишь цифры, форматируя их по шаблону ###-##-####. По мере ввода надпись на экране обновляется, сообщая о том, ввели ли вы требуемое количество цифр.

Данный пример легко видоизменить для поддержки других форматов ввода. Кроме того, в него может быть добавлен код, поддерживающий пользовательские события; например, наш унаследованный элемент управления TextBox может возбуждать событие после ввода всех необходимых данных, согласующихся с шаблоном ввода.

Оглавление книги


Генерация: 1.720. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз