Probleme: Textbox-Eingabezeichenüberprüfung mit Case

  • VB.NET

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

    Probleme: Textbox-Eingabezeichenüberprüfung mit Case

    Hallo zusammen,

    möchte gerne mit der folgenden Anweisung, meine Textbox bei der Eingabe auf Sonderzeichen überprüfen.
    Jedoch meldet er mir, dass alle Zeichen außerhalb der gültigen Bedingung ist.

    Könnt ihr vielleicht sagen, was ich falsch machen?

    VB.NET-Quellcode

    1. Private Sub txtBeschreibung_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBeschreibung.TextChanged
    2. 'Sonderzeichenprüfung
    3. For Each Buchstabe In txtBeschreibung.Text
    4. Select Case Asc(Buchstabe)
    5. Case 48 - 57, 65 - 90, 97 - 122
    6. 'alles in ordnung
    7. Case Else
    8. MsgBox("Unzulässige Zeichen!")
    9. Exit For
    10. End Select
    11. Next
    12. End Sub


    Hatte das erst so: 'txtBeschreibung.Text = txtBeschreibung.Text.Replace("&", "und") vor, jedoch wird der Cursor immer neu an den Anfang der Textbox gesetzt. Daher fällt diese Methode wohl aus.

    Hintergrund: für die Weiterverarbeitung darf kein & Zeichen vorhanden sein.

    Gruß
    Klaus
    Mach das im Key_Down-Ereignis, da kannst Du jesdes Zeichen einzeln behandeln. Bei TextChanged behandelst Du den ganzen Text, das ist höchst inperformant.
    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!
    habe den ersten Tipp direkt mal so ausprobiert:

    VB.NET-Quellcode

    1. Private Sub txtBeschreibung_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_beschreibung.KeyDown
    2. 'Sonderzeichenprüfung
    3. Select Case Asc(e.KeyCode)
    4. Case 48 - 57, 65 - 90, 97 - 122
    5. 'alles in ordnung
    6. Case Else
    7. MsgBox("Unzulässige Zeichen!")
    8. End Select
    9. End Sub
    10. '


    jetzt erscheint die Meldung nicht mehr sofort, sondern nach Eingabe des zweiten Zeichen. Wenn das erste Zeichen ein & (ASC 38) ist, passiert gar nichts.
    Irgendetwas scheint in meiner Schleife nicht zu laufen...?

    Vielleicht noch ein Tipp?

    EDIT: mir ist gerade noch aufgefallen, dass KeyDown nicht funktioniert: Wie soll ich den Großbuchstaben abfangen?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „klaus25“ ()

    Case 48 - 57, 65 - 90, 97 - 122

    Meinst Du vielleicht
    Case 48 To 57, ...
    Denn sonst wird soweit ich weiß 48 - 57 evaluiert


    Aber was viel wichtiger ist:
    So schaut das schöner aus:

    VB.NET-Quellcode

    1. Select Case e.KeyCode
    2. Case Keys.A To Keys.Z, ...
    3. End Select


    Eine andere Möglichkeit wäre ein Char-Array mit allen erlaubten Zeichen zu deklarieren und zu überprüfen, ob e.KeyChar dort enthalten ist. Wird zwar etwas unübersichtlicher, aber man kann so genauer auswählen, welche Zeichen man erlauben will.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils