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

> 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