Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
'Форматировать поступающий текст с целью установления его соответствия
'нужному формату:
'
' Формат номера карточки социального страхования: ###-##-####
' символы: 01234567890
'
' [in] inString : Текст, который мы хотим форматировать
' [in/out] selectionStart: Текущая точка вставки в тексте;
' она будет смещаться в связи с удалением
' и добавлением нами символов
'----------------------------------------------------------------------
Private Function formatText_NNN_NN_NNNN(ByVal inString As _
String, ByRef selectionStart As Integer) As String
Const firstDashIndex As Integer = 3
Const secondDashIndex As Integer = 6
'Удалить старые данные и поместить входную строку
'в объект StringBuilder, чтобы мы могли с ней работать.
m_sb.Length = 0
m_sb.Append(inString)
'------------------------------------------------------------
'Просмотреть каждый символ в строке, пока не будет
'достигнута максимальная длина нашего форматированного текста
'------------------------------------------------------------
Dim currentCharIndex As Integer
currentCharIndex = 0
While ((currentCharIndex < m_sb.Length) AndAlso _
(currentCharIndex < SSNumberLength))
Dim currentChar As Char
currentChar = m_sb(currentCharIndex)
If ((currentCharIndex = firstDashIndex) OrElse _
(currentCharIndex = secondDashIndex)) Then
'-------------------------------
'The character needs to be a "-"
'-------------------------------
If (currentChar <> "-"c) Then 'Вставить дефис
m_sb.Insert(currentCharIndex, "-")
'Если мы добавили символ перед точкой вставки,
'она должна быть смещена вперед
If (currentCharIndex <= selectionStart) Then
selectionStart = selectionStart + 1
End If
End If
'Этот символ годится, перейти к следующему символу
currentCharIndex = currentCharIndex + 1
Else
'-------------------------
'Символ должен быть цифрой
'-------------------------
If (System.Char.IsDigit(currentChar) = False) Then
'Удалить символ
m_sb.Remove(currentCharIndex, 1)
'Если мы добавили символ перед точкой вставки,
'она должна быть смещена назад
If (currentCharIndex < selectionStart) Then
selectionStart = selectionStart - 1
End If
'He увеличивать значение счетчика символов, ибо мы должны
'просмотреть символ, занявший место того символа,
'который мы удалили
Else
'Символ является цифрой, все нормально.
currentCharIndex = currentCharIndex + 1
End If
End If
End While
'Если превышена длина строки, усечь ее
If (m_sb.Length > SSNumberLength) Then
m_sb.Length = SSNumberLength
End If
'Возвратить новую строку
Return m_sb.ToString
End Function
Private m_in_OnChangeFunction As Boolean
Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
'------------------------------------------------------------------
'Если мы изменим свойство .Text, то будет осуществлен повторный
'вход в обработчик. В этом случае мы не хотим предпринимать никаких
'действий и должны просто выйти из функции без передачи события
'куда-то еще.
'------------------------------------------------------------------
If (m_in_OnChangeFunction = True) Then
Return
End If
'Заметьте, что сейчас мы находимся в функции OnChanged,
'поэтому мы можем обнаружить повторное вхождение (см. код выше)
m_in_OnChangeFunction = True
'Получить текущее свойство .Text
Поделиться:
Популярные книги
Кодекс Охотника. Книга III
3. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Геном хищника. Книга пятая
5. Я - Легенда!
Фантастика:
рпг
фэнтези
попаданцы
6.00
рейтинг книги
Неучтенный элемент. Том 3
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Монстр из прошлого тысячелетия
5. Соприкосновение миров
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XVII
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Чайлдфри
Любовные романы:
современные любовные романы
6.51
рейтинг книги
Запечатанный во тьме. Том 2
2. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
На границе империй. Том 10. Часть 7
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Журнал «Если», 2002 № 08
114. Журнал Если
Фантастика:
научная фантастика
5.00
рейтинг книги
Ким
Приключения:
исторические приключения
7.62
рейтинг книги
Криптозой
Фантастика:
научная фантастика
6.25
рейтинг книги
Оживший камень
1. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 7
7. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Уникум
1. Уникум
Фантастика:
альтернативная история
4.60