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

на главную - закладки

Жанры

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

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

Поделиться:
Популярные книги

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Изыскатель

Назимов Константин Геннадьевич
5. Травник
Фантастика:
фэнтези
7.00
рейтинг книги
Изыскатель

Последнее небо

Игнатова Наталья Владимировна
1. Зверь
Фантастика:
боевая фантастика
6.81
рейтинг книги
Последнее небо

Лекарь Империи

Карелин Сергей Витальевич
1. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.00
рейтинг книги
Лекарь Империи

Идеальный мир для Лекаря

Сапфир Олег
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря

Дорогами алхимии

Видум Инди
2. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Дорогами алхимии

Последняя

Гусейнова Ольга Вадимовна
1. Последняя
Фантастика:
фэнтези
5.00
рейтинг книги
Последняя

Лейтенант. Назад в СССР. Книга 8. Часть 1

Гаусс Максим
8. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Лейтенант. Назад в СССР. Книга 8. Часть 1

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

На границе империй. Том 10. Часть 2

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 10. Часть 2

Потомок бога

Решетов Евгений Валерьевич
1. Локки
Фантастика:
попаданцы
альтернативная история
аниме
сказочная фантастика
5.00
рейтинг книги
Потомок бога

Агенты ВКС

Вайс Александр
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Агенты ВКС

Великие мифы и легенды. 100 историй о подвигах, мире богов, тайнах рождения и смерти

Мудрова Ирина Анатольевна
Старинная литература:
мифы. легенды. эпос
5.00
рейтинг книги
Великие мифы и легенды. 100 историй о подвигах, мире богов, тайнах рождения и смерти

Убийца

Бубела Олег Николаевич
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Убийца