TextBox abfrage nur 2 Zeichen (Zahlen) und nur in einem Bereich

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    TextBox abfrage nur 2 Zeichen (Zahlen) und nur in einem Bereich

    Hallo zusammen,

    ich habe eine Textbox in welcher nur maximal 2 Zeichen (nur Zahlen) eingegeben werden dürfen.Es ist so, das jede Ziffer geprüft wird und der Wert auch nur von 0 bis 30 sein darf. Hier liegt das Problem, wie kann ich prüfen, dass es die Eingabe nur zwischen 0 und 30 ist? Wenn darüber, dann soll eine Fehlermeldung kommen...
    Das nächste Problem ist, dass ich so, wie es jetzt ist, keine 10 oder 20 eingeben kann, da schon die 1 auslösen würde. Wie kann ich das ändern?

    Bisher bin ich soweit gekommen :

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    2. Select Case Asc(e.KeyChar)
    3. Case 48 To 57, 8, 52 '48 bis 57 = Zahlen 0 bis 9 + 8 = Backspace/Rücktaste + 52 = Entf/Delete Taste
    4. Case Else
    5. e.Handled = True
    6. End Select
    7. If TextBox1.Text.Length = 1 Then 'wenn 2 Zeichen erreicht dann
    8. With TextBox1.Text
    9. Select Case True
    10. Case .Contains("0")
    11. MsgBox("blubb")
    12. Case .Contains("1")
    13. MsgBox("blubb1")
    14. '.
    15. '.
    16. '.
    17. Case .Contains("29")
    18. MsgBox("blubb29")
    19. Case .Contains("30")
    20. MsgBox("blubb30")
    21. End Select
    22. End With
    23. End If
    24. End Sub
    25. Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    26. If e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Tab Then
    27. '...Wenn Enter oder Tabulator gedrückt wurde
    28. With TextBox1.Text
    29. Select Case True
    30. Case .Contains("0")
    31. MsgBox("blubb")
    32. Case .Contains("1")
    33. MsgBox("blubb1")
    34. '.
    35. '.
    36. '.
    37. Case .Contains("29")
    38. MsgBox("blubb29")
    39. Case .Contains("30")
    40. MsgBox("blubb30")
    41. End Select
    42. End With
    43. End If
    44. End Sub
    Wie wär es denn, wenn Du den TextBox-Text in einen Integer umwandelst (s. Integer.TryParse) und schaust, ob sich eine Zahl zwischen 1 und 30 ergibt?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    zauber777 schrieb:

    dass ich mit C++ nichts anfangen kann
    What :?:
    Bilder
    • VB.jpg

      14,13 kB, 439×304, 125 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    gut nun kann ich es mir auf der Seite auch in vb anzeigen lassen und trotzdem komme ich leider nicht mit der Seite zu recht.
    Mein Versuch seht ihr unten. Ich kann aber weiterhin zahlen größer 30 eingeben und auch so funktioniert die Ausgabe in die 2. Textbox nicht immer.

    VB.NET-Quellcode

    1. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    2. Dim tbValue As Byte
    3. If TextBox1.Text = "" Then
    4. Else
    5. If Not (Byte.TryParse(TextBox1.Text, tbValue)) OrElse tbValue < 0 OrElse tbValue > 30 Then
    6. 'IP_Segment_TextBox1.Text = "1"
    7. With TextBox1.Text
    8. Select Case True
    9. Case .Contains("0")
    10. TextBox2.Text = "blubb0"
    11. Case .Contains("1")
    12. TextBox2.Text = "blubb1"
    13. Case .Contains("10")
    14. TextBox2.Text = "blubb10"
    15. Case .Contains("20")
    16. TextBox2.Text = "blubb20"
    17. '.
    18. '.
    19. '.
    20. Case .Contains("29")
    21. TextBox2.Text = "blubb29"
    22. Case .Contains("30")
    23. TextBox2.Text = "blubb30"
    24. End Select
    25. End With
    26. End If
    27. End If
    28. End Sub
    Das sind jetzt 3 Herangehensweisen von Dir: KeyPress, KeyDown, TextChanged. Womit willst Du nun arbeiten? Wenn Ne Taste gedrückt wird, wenn Enter/Tab gedrückt werden oder wenn sich der Text ändert? Das sind dann mehr oder weniger 3 unterschiedlich Herangehensweisen.
    Für TextChanged:

    VB.NET-Quellcode

    1. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    2. Dim Result As Integer
    3. If String.IsNullOrEmpty(TextBox1.Text) Then Return
    4. If Not Integer.TryParse(TextBox1.Text, Result) Then TextBox1.Clear()
    5. If Result > 30 Then MessageBox.Show("Wert darf nicht > 30 sein.")
    6. End Sub
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @zauber777 Zunächst solltest Du im KeyDown-Event der TextBox nur Tastendrücke zulassen, die erlaubt sind sprich alle anderen ignorieren:

    VB.NET-Quellcode

    1. Private Sub TextBox_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    2. Dim tb As TextBox = CType(sender, TextBox)
    3. Select Case e.KeyCode
    4. Case Keys.D0 To Keys.D9, Keys.Oemcomma, Keys.Back
    5. ' nix tun
    6. ' Diese Aufzählung ist nicht vollständig!
    7. Case Else
    8. e.SuppressKeyPress = True
    9. End Select
    10. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hänge weiterhin irgendwie fest bei meinem Problem...
    Ich will mit TextChanged-Event arbeiten, da es "live" Ergebnisse liefern soll...

    VB.NET-Quellcode

    1. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    2. Dim Result As Integer
    3. If String.IsNullOrEmpty(TextBox1.Text) Then Return
    4. If Not Integer.TryParse(TextBox1.Text, Result) Then TextBox1.Clear()
    5. If Result > 30 Then MessageBox.Show("Wert darf nicht > 30 sein.")
    6. With TextBox1.Text
    7. Select Case True
    8. Case .Contains("0")
    9. TextBox2.Text = "blubb0"
    10. Case .Contains("1")
    11. TextBox2.Text = "blubb1"
    12. Case .Contains("10")
    13. TextBox2.Text = "blubb10"
    14. Case .Contains("11")
    15. TextBox2.Text = "blubb11"
    16. Case .Contains("20")
    17. TextBox2.Text = "blubb20"
    18. '.
    19. '.
    20. '.
    21. Case .Contains("29")
    22. TextBox2.Text = "blubb29"
    23. Case .Contains("30")
    24. TextBox2.Text = "blubb30"
    25. End Select
    26. End With
    27. End Sub


    Wenn ich 0 eingebe in der Textbox1, dann wird auch sofort blubb0 in der Textbox2 angezeigt. Wenn ich es in 1 ändere, dann kommt auch sofort blubb1.
    Das Problem ist jedoch, dass nur die Ziffer ausgewertet wird, welche eingegeben wird und nicht die komplette Zahl.
    Wenn ich zum Beispiel 10 eingebe, dann kommt erst blubb1 und dann blubb0. Normalerweise müsste bei der Eingabe der ersten Ziffer (1) blubb1 kommen und nach der Eingabe der 2. Ziffer (0) müsste blubb10 kommen. Dies passiert aber nicht. Warum? Wie kann ich das Problem lösen?
    probierma

    VB.NET-Quellcode

    1. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    2. Dim Result As Integer
    3. If String.IsNullOrEmpty(TextBox1.Text) Then Return
    4. If Not Integer.TryParse(TextBox1.Text, Result) Then TextBox1.Clear()
    5. If Result > 30 Then MessageBox.Show("Wert darf nicht > 30 sein.")
    6. With TextBox1.Text
    7. Select Case True
    8. Case .Contains("10")
    9. TextBox2.Text = "blubb10"
    10. Case .Contains("11")
    11. TextBox2.Text = "blubb11"
    12. Case .Contains("20")
    13. TextBox2.Text = "blubb20"
    14. '.
    15. '.
    16. '.
    17. Case .Contains("29")
    18. TextBox2.Text = "blubb29"
    19. Case .Contains("30")
    20. TextBox2.Text = "blubb30"
    21. Case .Contains("0")
    22. TextBox2.Text = "blubb0"
    23. Case .Contains("1")
    24. TextBox2.Text = "blubb1"
    25. End Select
    26. End With
    27. End Sub
    Hat leider nicht geholfen.
    Ich vermute es liegt daran, dass Ziffer für Ziffer geprüft wird und nur wenn es die Ziffer nicht einzeln gibt, wird die komplette Zahl genommen.
    Wenn ich zum Beispiel 29 eingebe, dann kommt auch blubb29. Wahrscheinlich weil in der aktuellen Version die 9 als einzelne Ziffer nicht vorhanden ist.
    In Zukunft soll aber für jede Zahl von 0 bis 30 etwas geschehen... Um es jetzt aber erst einmal in den Griff zu bekommen, wollte ich es erst einmal mit den paar Zahlen versuchen...
    Ok. Du willst 29 eingeben. Also 2 und 9. Woher soll das Programm wissen, dass Du mit der Eingabe fertig bist? Oder willst Du zuerst blubb2 und danach blubb29 sehen? Dann arbeite nicht mit Case .Contains("29"), sondern mit Case "29"
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Oder willst Du zuerst blubb2 und danach blubb29 sehen?


    ja richtig, genau so soll es angezeigt werden.

    VB.NET-Quellcode

    1. Case "29"

    lässt VB nicht zu, weil ich mit Option Strict On arbeite.

    Habe es jetzt wie folgt gelöst. Ich mach es einfach mit IF...

    VB.NET-Quellcode

    1. ​If TextBox1.Text = "0" Then TextBox2.Text = "blubb0"
    2. If TextBox1.Text = "1" Then TextBox2.Text = "blubb1"
    3. If TextBox1.Text = "10" Then TextBox2.Text = "blubb10"
    4. If TextBox1.Text = "11" Then TextBox2.Text = "blubb11"
    5. If TextBox1.Text = "20" Then TextBox2.Text = "blubb20"
    6. If TextBox1.Text = "29" Then TextBox2.Text = "blubb29"
    7. If TextBox1.Text = "30" Then TextBox2.Text = "blubb30"

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „zauber777“ ()

    zauber777 schrieb:

    lässt VB nicht zu, weil ich mit Option Strict On arbeite.
    Weil Du ohne Plan arbeitest. ;)

    VB.NET-Quellcode

    1. Select Case TextBox1.Text
    2. Case "10"
    3. TextBox2.Text = "blubb10"
    4. Case "11"
    5. TextBox2.Text = "blubb11"
    6. Case "20"
    7. TextBox2.Text = "blubb20"
    8. '.
    9. '.
    10. '.
    11. End Select
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jetzt wär schon gut zu wissen, was da wirklich passiert. Nicht dass man es am Ende einfach darauf kürzen kann:

    VB.NET-Quellcode

    1. TextBox2.Text = "blubb" & TextBox1.Text
    Ohne If, ohne Select Case
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.