Fehler bei leerer Textbox & Eingabewerte begrenzen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von cl10k.

    Fehler bei leerer Textbox & Eingabewerte begrenzen

    Hallo :)

    Ich bin ziemlich neu in Visual Studio 2008, habe aber schon etwas in VBA unter Excel und CATIA (ein CAD-Programm) gearbeitet.

    Zum Problem:
    Ich habe eine Textbox die ich mit Integer Werten fülle und anschließend weiterverarbeite.

    Wenn der User nun die Textbox komplett leert, z.B. um eine Eingabe zu korrigieren erhalte ich die Fehlermeldung Conversion from String "" to type 'integer' is not valid.
    Wie fange ich diese doch recht häufig auftretende Situation ab und wie kann ich zusätzlich die Werteeingabe auf einen sinnvollen Wert begrenzen, z.B. nur Integerwerte von 0 bis 50000?

    Danke

    lg Christian
    Hallo cl10k,

    zwei Möglichkeiten

    1. Prüfe vor der konvertierung in Integer ob die Textbox einen Inhalt hat.
      Evtl. mit IsNumeric arbeiten - IsNumeric prüft ob der String eine Zahl ist.
    2. Die etwas gröbere Methode ist es einen Try...Catch Block zu verwenden.
      Diesen setzt man in der Regel aber nur dann ein, wenn ein unerwarteter Fehler auftreten kann.


    ... und wie kann ich zusätzlich die Werteeingabe auf einen sinnvollen Wert begrenzen, z.B. nur Integerwerte von 0 bis 50000?

    Schierig - du könntest die maximale Anzahl an Zeichen begrenzen.
    Hierfür gibt es eine Eigenschaft der Textbox (MaxLength).

    Gruss

    mikeb69
    Das hier prüft die Eingabe auf Integer und ignoriert Fehleingaben

    VB.NET-Quellcode

    1. Dim i As Integer 'deine Integervariable
    2. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    3. 'Übernahme des im sender enthaltenen Txtbox-Objektes
    4. Dim tb As TextBox = DirectCast(sender, TextBox)
    5. If tb.Text = "" Then tb.Text = "0" 'Wenn die Textbox leer ist, 0 setzen
    6. Dim CursorPos As Integer = tb.SelectionStart 'Cursor-Position zwischenspeichern
    7. If Integer.TryParse(tb.Text, i) Then 'Prüfung auf Integer
    8. tb.Tag = i 'zwischenspeichern der korrekten Eingabe in der Tag-Eigenschaft und Formatieren in Integer (01 >> 1)
    9. Else
    10. CursorPos -= 1 'bei Fehleingabe Cursor zurück
    11. End If
    12. tb.Text = CStr(tb.Tag) 'zurücklesen des formatierten Integer
    13. tb.SelectionStart = CursorPos 'Cursor setzen
    14. End Sub

    Durch Direktcast funzt das für jede Textbox, deren Textchange auf diese Sub verweist... ;)
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: