2 Stimmen

Validierung von Dezimalzahlen im Textfeld

Ich versuche, in Visual Basic zu überprüfen, ob eine Zahl eine Dezimalzahl ist. Die Ergebnisse, die ich erhalte, wenn die Zahl gültig ist, werden in der msgBox angezeigt. Wenn sie nicht gültig ist, erhalte ich keine msgBox und das Programm stürzt mit einer Fehlermeldung ab, dass die Zahl kleiner als unendlich sein muss.

Ich habe versucht, ein weiteres If Not IsNumeric(txt1.text) then -- hinzuzufügen, erhielt aber die gleichen Ergebnisse.

Was habe ich falsch gemacht?

If IsNumeric(txt1.text) Then
  msgBox("good")
Else
  msgBox("not good")
End If

8voto

ColorEyes Punkte 205

Versuchen Sie es mit Double.TryParse o Decimal.TryParse anstelle von IsNumeric.

Dim result as Double = 0.0
if Double.TryParse(txt1.text, result) then
  ' valid entry
else
  ' invalid entry
end if

1voto

chillysapien Punkte 2196

Ich musste gerade eine Funktion schreiben, die die Eingabe in ein Textfeld auf gültige Dezimalwerte beschränkt, und ich kam auf Folgendes:

 Private Sub validateDecimalTextBox(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) handles myTextBox.keyPress
        Dim textBox As TextBox = DirectCast(sender, TextBox)
        If Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar) Or (e.KeyChar = "." And textBox.Text.IndexOf(".") < 0) Or (e.KeyChar = "-" And textBox.Text.Length = 0)) Then
            e.Handled = True
        End If
    End Sub

Dies sollte die Benutzereingabe auf dezimale Werte beschränken und auch negative Werte zulassen.

Wenn Sie die Benutzereingaben einschränken, können Sie beim Abrufen des Wertes aus dem Textfeld sicherer sein, dass er gültig ist.

Diese Lösung ist jedoch nicht vollständig, da sie es einem Benutzer erlauben würde, einfach "-" in das Textfeld einzugeben, was (vermutlich) keine gültige Eingabe für Sie wäre. Daher können Sie die Lösungen verwenden, die andere erwähnt haben, und eine der folgenden Möglichkeiten auf sinnvolle Weise nutzen.

double.parse, 
double.tryparse 
isNumeric()

Meine persönliche Präferenz wäre für isNumeric(), aber die Wahl ist wirklich bis zu Ihnen.

0voto

Beth Punkte 9425

Sie können Zeichen im Tastendruck-Ereignis des Textfelds ignorieren, z. B.:

Private Sub txtValue_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtValue.KeyPress
        If Not Char.IsDigit(e.KeyChar) Then
            If Not (e.KeyChar = vbBack) Then
               e.Handled = True
            End If
        End If
End Sub

Ich bin mir nicht sicher, welche Version von VB Sie verwenden, nehme aber an, dass es sich um .NET handelt.

0voto

user2219334 Punkte 1

Sie können auch das Textbox Keypress-Ereignis verwenden, d.h.

Private Sub Textbox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Textbox1.KeyPress
    If (e.KeyChar < "0" Or e.KeyChar > "9") And e.KeyChar <> "." And e.KeyChar <> ControlChars.Back Then
        e.Handled = True
    Else
        If e.KeyChar = "." Then
            If Textbox1.Text.Contains(".") Then
                Beep()
                e.Handled = True
            End If
        End If
    End If

End Sub

Ich hoffe, das hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X