Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ .NET Compact FrameworkΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 197

Автор Иво Π‘Π°Π»ΠΌΡ€Π΅

 'элСмСнта управлСния.

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

 AddHandler newButton.Click, _

  AddressOf Me.ClickHandlerForButtons


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

 'ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ эту ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΊ Ρ„ΠΎΡ€ΠΌΠ΅. По сущСству,

 'это создаст ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅!

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

 newButton.Parent = Me


 'Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ счСтчик Π² соотвСтствии с созданиСм ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ

 m_nextNewButtonIndex = m_nextNewButtonIndex + 1

End Sub


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

'ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ

'ΠΊ нашим Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ

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

Private Sub ClickHandlerForButtons(ByVal sender As Object, _

 ByVal e As System.EventArgs)

 Dim buttonCausingEvent As Button = _

  CType(sender, System.Windows.Forms.Button)


 'Π’Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ сообщСний, ΠΈΠ·Π²Π΅Ρ‰Π°ΡŽΡ‰Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ,

 'Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ событиС

 MsgBox("Click event from:" + vbCrLf + buttonCausingEvent.Text)

End Sub

Листинг 13.3. Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰Π΅Π΅ тСкстовоС ΠΎΠΊΠ½ΠΎ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π΅ тСкст Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ###-##-####

Option Strict On

Imports System

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

'Π­Ρ‚ΠΎΡ‚ класс являСтся элСмСнтом управлСния, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ элСмСнта управлСния

'TextBox.

'Он наслСдуСт всС графичСскиС свойства TextBox, Π½ΠΎ добавляСт Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ

'содСрТимого тСкстового ΠΎΠΊΠ½Π°, Ρ‚Π΅ΠΌ самым гарантируя,

'Ρ‡Ρ‚ΠΎ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ тСкст Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ:

'###-##-####.

'Π­Ρ‚ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ соотвСтствуСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π΅ΠΊ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ страхования,

'ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² БША.

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

Public Class SocialSecurityTextBox

Inherits System.Windows.Forms.TextBox

Private m_inputIsFullValidEntry As Boolean

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

'Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π»ΠΈ

'Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ страхования ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ

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

Public ReadOnly Property IsFullValidInput() As Boolean

 Get

  Return m_inputIsFullValidEntry

 End Get

End Property

'ΠžΠ±ΡŠΠ΅ΠΊΡ‚ StringBuilder, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Private m_sb As System.Text.StringBuilder

'Максимальная Π΄Π»ΠΈΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… строк

Const SSNumberLength As Integer = 11


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

'ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

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

Public Sub New()

 'Π Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для нашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° StringBuilder ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ

 'мСсто для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… символов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

 m_sb = New System.Text.StringBuilder(SSNumberLength + 5)

 m_inputIsFullValidEntry = False

End Sub


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

'Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠΉ тСкст с Ρ†Π΅Π»ΡŒΡŽ установлСния Π΅Π³ΠΎ соотвСтствия

'Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ:

'

' Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ страхования: ###-##-####

' символы: 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

 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

 If (System.Char.IsLetter(keyPressed)) Then

  'Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ систСмС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ событиС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ

  e.Handled = True

  Return

 End If

 'ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиши ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом

 MyBase.OnKeyPress(e)

 End Sub

End Class

Листинг 13.4. Код Ρ„ΠΎΡ€ΠΌΡ‹ для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта управлСния TextBox

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