Чтение онлайн

ЖАНРЫ

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

Салмре Иво

Шрифт:

selectionStart++;

}

}

//Этот символ годится, перейти к следующему символу

currentCharIndex++;

} else

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

//Символ должен быть цифрой

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

{

if (System.Char.IsDigit(currentChar) == false) {

//Удалить символ

m_sb.Remove(currentCharIndex, 1);

//Если
мы добавили символ перед точкой вставки,

//она должна быть смещена назад

if (currentCharIndex < selectionStart) {

selectionStart--;

}

//He увеличивать значение счетчика символов, ибо мы должны

//просмотреть символ, занявший место того символа,

//который мы удалили

} else {

//Символ является цифрой, все нормально.

currentCharIndex++;

}

}

}

//Если превышена длина строки, усечь ее

if (m_sb.Length > SSNumberLength) {

m_sb.Length = SSNumberLength;

}

//Возвратить новую строку

return m_sb.ToString;

 }

 bool m_in_OnChangeFunction;

 protected override void OnTextChanged(EventArgs e) {

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

//Если мы изменим свойство .Text, то будет осуществлен повторный

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

//действий и должны просто выйти из функции без передачи события

//куда-то еще.

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

if (m_in_OnChangeFunction == true) {

return;

}

//Заметьте, что сейчас мы находимся в функции OnChanged,

//поэтому мы можем обнаружить повторное вхождение (см. код выше)

m_in_OnChangeFunction = true;

//Получить текущее свойство .Text

string oldText = this.Text;

//Получить текущий индекс

SelectionStart int selectionStart = this.SelectionStart;

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

string newText = formatText_NNN_NN_NNNN(oldText, ref selectionStart);

//Если
текст отличается от исходного, обновить

//свойство .Text

if (System.String.Compare(oldText, newText) != 0) {

//Это приведет к повторному вхождению

this.Text = newText;

//Обновить местоположение точки вставки

this.SelectionStart = selectionStart;

}

//Мы принудительно обеспечили соответствие введенного текста

//правильному формату, поэтому, если длина строки согласуется с длиной

//номера карточки социального страхования, то мы знаем что она имеет

//формат ###-##-####.

if (this.Text.Length == SSNumberLength) {

//Да, мы имеем полный номер карточки социального страхования

m_inputIsFullValidEntry = true;

} else {

//Нет, мы пока не получили полный номер карточки социального страхования

m_inputIsFullValidEntry = false;

}

//Вызвать наш базовый класс и сообщить всем объектам, которых это

//может интересовать, что текст изменился

base.OnTextChanged(e);

//Заметьте, что сейчас мы покидаем наш код и хотим отключить

//проверку повторных вхождений в него.

m_in_OnChangeFunction = false;

 }

 protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) {

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

//то просто игнорировать их, если они встречаются.

char keyPressed = e.KeyChar;

if (System.Char.IsLetter(keyPressed)) {

//Сообщить системе о том, что событие обработано

e.Handled =true;

return;

}

//Обработать нажатие клавиши обычным способом

base.OnKeyPress(e);

 } //Конец функции

} //Конец класса

Листинг 13.4 Код формы для создания пользовательского элемента управления TextBox

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

//Переменная для хранения нашего нового элемента управления TextBox

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

SocialSecurityTextBox m_filteredTextBox;

Поделиться с друзьями: