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?

War es hilfreich?

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                                

Voldemort

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top