Принять только цифры для текстового поля
Вопрос
Я нашел этот код для того, чтобы сделать мой текстовый поле принять только номера.
Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim allowedChars As String = "0123456789"
If allowedChars.IndexOf(e.KeyChar) = -1 Then
' Invalid Character
e.Handled = True
End If
End Sub
Но ... пользователь не может удалить числа, используя кнопку Backspace. Как мне это сделать?
Решение
Вам также необходимо обрабатывать наклеженный текст (не может быть клавиш). Лучший способ сделать это - с MaskedTextbox.
Другие советы
Private Sub txtValue_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtValue.KeyPress
'Dim allowedChars As String = "0123456789"
'If allowedChars.IndexOf(e.KeyChar) = -1 Then
' ' Invalid Character
' e.Handled = True
'End If
'If (e.KeyChar = Microsoft.VisualBasic.Chr(8)) Then
' e.Handled = True
'End If
If Char.IsDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
e.Handled = True
End If
End Sub
Я разрабатываю ваш первый код, чтобы позволить пользователю удалить тоже.
Вот код:
Dim BACKSPACE As Boolean
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyCode = Keys.Back Then
BACKSPACE = True
Else
BACKSPACE = False
End If
End Sub
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If BACKSPACE = False Then
Dim allowedChars As String = "0123456789"
If allowedChars.IndexOf(e.KeyChar) = -1 Then
e.Handled = True
End If
End If
End Sub
Надеюсь, мой код был вам полезен :)
Используйте этот код, он поможет вам
Public Function OnlyDigitsOnKeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
Try
If System.Char.IsDigit(e.KeyChar) = False And e.KeyChar <> Microsoft.VisualBasic.Chr(8) And e.KeyChar <> Microsoft.VisualBasic.Chr(46) Or (InStr(sender.text, ".") > 0 And e.KeyChar = Microsoft.VisualBasic.Chr(46))
Then
e.Handled = True
End If
Catch ex As Exception
Common.ErrorHandler(ex)
End Try
End Function
Когда у меня было требование ввода, который принимает только числа, я обычно использовал NumericUpDown
учебный класс. Он также обрабатывает ограничения и десятичные десятики.
Private Sub txtValue_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtValue.KeyPress
Dim allowedChars As String = "."
'If allowedChars.IndexOf(e.KeyChar) = -1 Then
' ' Invalid Character
' e.Handled = True
'End If
'If (e.KeyChar = Microsoft.VisualBasic.Chr(8)) Then
' e.Handled = True
'End If
If Char.IsDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False And allowedChars.IndexOf(e.KeyChar) = -1 Then
e.Handled = True
End If
End Sub
Вот какой -то код, который я написал. Это позволяет пользователю удалять, и пользователь может сделать текстовое поле пустым, если он желает. Он обрабатывает, когда пользователь набирает отклоненный символ, и он также обрабатывает, когда пользователь внедряет текст в текстовое поле. Если пользователь вставляет строку в коробку, которая представляет собой сочетание допустимых и недействительных символов, действительные символы появятся в текстовом поле, а неверные символы не будут.
Он также имеет логику, чтобы гарантировать, что курсор ведет себя нормально. (Проблема с установкой текста на новое значение заключается в том, что курсор перемещается обратно в начало. Этот код отслеживает исходную позицию и вносит коррективы, чтобы учесть любые неверные символы, которые удаляются.)
Этот код может быть размещен в событии 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
ПРИМЕЧАНИЕ - если вам нужно сделать это для куча текстовых полей, вы можете сделать версию этого общего назначения, создав подстройку, которая принимает ссылку на текстовое поле в качестве параметра. Тогда вам нужно только позвонить в Sub из события TextChanged.
Private Sub TMarksTextBox_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TMarksTextBox.KeyPress
If e.KeyChar < "0" OrElse e.KeyChar > "9" AndAlso e.KeyChar <> ControlChars.Back Then
e.Handled = True
End If
End Sub