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