'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
'Это приведет к повторному вхождению
Me.Text = newText
'Обновить местоположение точки вставки
Me.SelectionStart = selectionStart
End If
'Мы принудительно обеспечили соответствие введенного текста правильному
'формату, поэтому, если длина строки согласуется с длиной номера
'карточки социального страхования, то мы знаем что он имеет
'формат ###-##-####.
If (Me.Text.Length = SSNumberLength) Then
'Да, мы имеем полный номер карточки социального страхования
m_inputIsFullValidEntry = True
Else
'Нет, мы пока не получили полный номер карточки социального страхования
m_inputIsFullValidEntry = False
End If
'Вызвать наш базовый класс и сообщить всем объектам, которых это может
'интересовать, что текст изменился
MyBase.OnTextChanged(e)
'Заметьте, что сейчас мы покидаем наш код и хотим отключить
'проверку повторных вхождений в него.
m_in_OnChangeFunction = False
End Sub
Protected Overrides Sub OnKeyPress( _
ByVal e As System.Windows.Forms.KeyPressEventArgs)
'Поскольку нам известно, что никакие буквы при вводе нам не нужны,
'то просто игнорировать их, если они встречаются.
Dim keyPressed As Char = e.KeyChar