Литмир - Электронная Библиотека
Содержание  
A
A

'                           и добавлением нами символов

'----------------------------------------------------------------------

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

 Dim oldText As String = Me.Text

 'Получить текущий индекс SelectionStart

 Dim selectionStart As Integer = Me.SelectionStart

 'Форматировать строку, чтобы она удовлетворяла нашим потребностям

 Dim newText As String = formatText_NNN_NN_NNNN(oldText, _

  selectionStart)

 'Если текст отличается от исходного, обновить

 'свойство .Text

 If (oldText <> newText) Then

257
{"b":"947732","o":1}