Akzeptieren Sie nur Ziffern für Textbox
Frage
Ich habe diesen Code gefunden, damit mein Textfeld nur Zahlen akzeptiert.
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
Aber ... der Benutzer kann die Nummern mit der Backpace -Taste nicht löschen. Wie mache ich dann?
Lösung
Sie müssen auch einen eingefügten Text verarbeiten (es gibt möglicherweise keinen Schlüsseldruck). Der beste Weg, dies zu tun, ist mit einem MaskedTextBox.
Andere Tipps
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
Ich entwickle Ihren ersten Code, damit der Benutzer auch löschen kann.
Hier ist der Code:
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
Ich hoffe mein Code war für dich nützlich :)
Verwenden Sie diesen Code, er wird Ihnen helfen
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
Wenn ich die Anforderung einer Eingabe hatte, die nur Zahlen akzeptiert, habe ich normalerweise die verwendet NumericUpDown
Klasse. Es behandelt auch Grenzen und Dezimalstellen.
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
Hier ist ein Code, den ich geschrieben habe. Damit kann der Benutzer löschen und der Benutzer kann das Textfeld leer machen, wenn er es wünscht. Es wird behandelt, wenn der Benutzer ein unzulässiges Zeichen eingibt, und es wird auch behandelt, wenn der Benutzer Text in das Textfeld einpasst. Wenn der Benutzer eine Zeichenfolge in das Feld einsetzt, das eine Mischung aus gültigen und ungültigen Zeichen ist, werden die gültigen Zeichen im Textfeld angezeigt, und die ungültigen Zeichen nicht.
Es hat auch Logik, um sicherzustellen, dass sich der Cursor normal verhält. (Ein Problem bei der Festlegung des Textes auf einen neuen Wert ist, dass der Cursor wieder auf den Anfang verschoben wird. Dieser Code verfolgt die ursprüngliche Position und nimmt Anpassungen vor, um alle ungültigen Zeichen zu berücksichtigen, die entfernt werden.)
Dieser Code kann in das textgeschriebene Ereignis eines beliebigen Textfelds platziert werden. Ändern Sie unbedingt den Namen von TextBox1 in die Textbox.
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
Hinweis - Wenn Sie dies für eine Reihe von Textboxen tun müssen, können Sie eine allgemeine Version davon erstellen, indem Sie ein Sub erstellen, das eine Referenz auf ein Textfeld als Parameter akzeptiert. Dann müssen Sie nur das U -Boot von dem textchangedierten Ereignis anrufen.
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