Выбрать главу

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

Листинг 13.3. Фильтрующее текстовое окно, принимающее текст в формате ###-##-####

using System;

//----------------------------------------------------------------------

//Этот класс является элементом управления, производным от TextBox.

//Он наследует все графические свойства TextBox, но добавляет фильтрацию

//содержимого текстового окна, тем самым гарантируя,

//что вводимый текст будет соответствовать следующему формату:

//###-##-####.

//Этот формат соответствует формату номеров карточек социального

//страхования, которые используются в США.

//----------------------------------------------------------------------

public class  SocialSecurityTextBox: System.Windows.Forms.TextBox {

 private bool  m_inputIsFullValidEntry;

 //------------------------------------

 //Указывает, получен ли номер карточки

 //социального страхования полностью

 //------------------------------------

 public bool  IsFullValidInput {

  get {return m_inputIsFullValidEntry;}

 }

 //Объект StringBuilder, который мы будем часто использовать

 System.Text.StringBuilder m_sb;

 //Максимальная длина обрабатываемых строк

 const int  SSNumberLength = 11;

 //-----------

 //Конструктор

 //-----------

 public  SocialSecurityTextBox() {

  //Распределить память для нашего объекта StringBuilder и предоставить

  //место для нескольких дополнительных рабочих символов по умолчанию

  m_sb = new System.Text.StringBuilder(SSNumberLength + 5);

  m_inputIsFullValidEntry = false;

 }

 //---------------------------------------------------------------------

 //Форматировать поступающий текст с целью установления его соответствия

 //нужному формату:

 //

 // Формат номера карточки социального страхования : ###-##-####

 // символы: 01234567890

 //

 // [in] inString : Текст, который мы хотим форматировать

 // [in/out] selectionStart: Текущая точка вставки в тексте;

 // она будет смещаться в связи с удалением

 // и добавлением нами символов

 //----------------------------------------------------------------------

 private string formatText_NNN_NN_NNNN(string inString, ref int selectionStart) {

  const int  firstDashIndex = 3;

  const int secondDashIndex = 6;

  //Удалить старые данные и поместить входную строку

  //в объект StringBuilder, чтобы мы могли с ней работать.

  m_sb.Length = 0;

  m_sb.Append(inString);

  //------------------------------------------------------------

  //Просмотреть каждыйсимвол в строке, пока не будет