Вот код, который я написал.Это позволяет пользователю удалять, и пользователь может сделать текстовое поле пустым, если он пожелает.Он обрабатывает, когда пользователь вводит запрещенный символ, и также обрабатывает, когда пользователь вставляет текст в текстовое поле.Если пользователь вставит в поле строку, содержащую сочетание действительных и недопустимых символов, допустимые символы появятся в текстовом поле, а недопустимые символы - нет.
В нем также есть логика для обеспечения того, чтобыКурсор ведет себя нормально.(Проблема с установкой текста в новое значение заключается в том, что курсор перемещается обратно в начало. Этот код отслеживает исходную позицию и вносит коррективы для учета любых недопустимых символов, которые удаляются.)
ЭтоКод может быть помещен в событие TextChaned любого текстового поля.Обязательно измените имя с TextBox1, чтобы оно соответствовало вашему текстовому полю.
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
Dim selStart As Integer = TextBox1.SelectionStart
Dim selMoveLeft As Integer = 0
Dim newStr As String = "" 'Build a new string by copying each valid character from the existing string. The new string starts as blank and valid characters are added 1 at a time.
For i As Integer = 0 To TextBox1.Text.Length - 1
If "0123456789".IndexOf(TextBox1.Text(i)) <> -1 Then 'Characters that are in the allowed set will be added to the new string.
newStr = newStr & TextBox1.Text(i)
ElseIf i < selStart Then 'Characters that are not valid are removed - if these characters are before the cursor, we need to move the cursor left to account for their removal.
selMoveLeft = selMoveLeft + 1
End If
Next
TextBox1.Text = newStr 'Place the new text into the textbox.
TextBox1.SelectionStart = selStart - selMoveLeft 'Move the cursor to the appropriate location.
End Sub
Примечание. Если вам нужно сделать это для нескольких текстовых полей, вы можете сделать универсальную версию этого, создав подпункт,принимает ссылку на текстовое поле в качестве параметра.Тогда вам нужно только вызвать подпрограмму из события TextChanged.