Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
На рис. 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 может возбуждать событие после ввода всех необходимых данных, согласующихся с шаблоном ввода.