Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
Данный пример легко видоизменить для поддержки других форматов ввода. Кроме того, в него может быть добавлен код, поддерживающий пользовательские события; например, наш унаследованный элемент управления 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);
//------------------------------------------------------------
//Просмотреть каждыйсимвол в строке, пока не будет
//достигнута максимальная длина нашего форматированного текста
//------------------------------------------------------------
int currentCharIndex;
currentCharIndex = 0;
while ((currentCharIndex < m_sb.Length) && (currentCharIndex < SSNumberLength)) {
char currentChar;
currentChar = m_sb[currentCharIndex];
if ((currentCharIndex == firstDashIndex) || (currentCharIndex == secondDashIndex))
//-------------------------------
//Данным символом должен быть "-"
//-------------------------------
{
if (currentChar != '-') {
//Вставить дефис
m_sb.Insert(currentCharIndex, "-");
//Если мы добавили символ перед точкой вставки,
//она должна быть смещена вперед
if (currentCharIndex <= selectionStart) {
selectionStart++;
}
}
//Этот символ годится, перейти к следующему символу
currentCharIndex++;
} else
//-------------------------
//Символ должен быть цифрой
//-------------------------
{
if (System.Char.IsDigit(currentChar) == false) {
//Удалить символ
Поделиться:
Популярные книги
Вечный. Книга VII
7. Вечный
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Покоривший СТЕНУ 4: Четыре ответа
4. Покоривший СТЕНУ
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Уникум
1. Уникум
Фантастика:
альтернативная история
4.60
рейтинг книги
Дворянин
2. Император и трубочист
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Личник
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Выбор
4. История Ирэн
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Черный Маг Императора 16
16. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Моров. Том 5
4. Моров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Охотник за головами
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Три `Д` для миллиардера. Свадебный салон
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Наследие Маозари 3
3. Наследие Маозари
Фантастика:
рпг
аниме
5.00
рейтинг книги
Моров
1. Моров
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Шайтан Иван 2
2. Шайтан Иван
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Второй кощей
8. Бедовый
Фантастика:
юмористическое фэнтези
городское фэнтези
мистика
5.00