Textbox KeyPress für mehrere Textboxen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Textbox KeyPress für mehrere Textboxen

    Hallo
    brauche Hilfe um folgenden Code auf 60 Textboxen anzuwenden.
    Die eine Möglichkeit wäre, in jeder Textbox_KeyPress den Code einzufügen,
    oder auf Hilfe von euch zu bekommen.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub txtX5_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtX5.KeyPress
    2. ' - nur als erstes Zeichen
    3. ' nur Zahlen , und - zulassen
    4. ' -, als Zeichenfolge ist nicht erlaubt
    5. If txtX5.SelectionStart = 0 Then
    6. e.Handled = Not ("0123456789-" & Convert.ToChar(Keys.Back)).Contains(e.KeyChar)
    7. End If
    8. If txtX5.SelectionStart > 0 Then
    9. e.Handled = Not ("0123456789," & Convert.ToChar(Keys.Back)).Contains(e.KeyChar)
    10. End If
    11. If txtX5.Text.Contains(",") Then
    12. e.Handled = Not ("0123456789" & Convert.ToChar(Keys.Back)).Contains(e.KeyChar)
    13. End If
    14. If txtX5.Text.Contains("-") AndAlso txtX5.SelectionStart = 1 Then
    15. e.Handled = Not ("0123456789" & Convert.ToChar(Keys.Back)).Contains(e.KeyChar)
    16. End If
    17. End Sub



    Mit " For Each...", hat es nicht funktioniert.
    Den Code aus Textbox_KeyPress in Textbox_KeyDown anzuwenden, da bin ich gescheitert.
    Bedanke mich im Voraus für eure Hilfe.
    MfG. Willi
    keine Ahnung, ob dein Code funzt, aber so könnte man es umarbeiten, dass jede Textbox diesem Handler ihr KeyPressed-Event schicken kann:

    VB.NET-Quellcode

    1. Private Sub AnyTextbox_KeyPress(sender As Object, e As KeyPressEventArgs)
    2. ' - nur als erstes Zeichen
    3. ' nur Zahlen , und - zulassen
    4. ' -, als Zeichenfolge ist nicht erlaubt
    5. Dim txt = DirectCast(sender, TextBox)
    6. If txt.SelectionStart = 0 Then
    7. e.Handled = Not ("0123456789-" & Convert.ToChar(Keys.Back)).Contains(e.KeyChar)
    8. End If
    9. If txt.SelectionStart > 0 Then
    10. e.Handled = Not ("0123456789," & Convert.ToChar(Keys.Back)).Contains(e.KeyChar)
    11. End If
    12. If txt.Text.Contains(",") Then
    13. e.Handled = Not ("0123456789" & Convert.ToChar(Keys.Back)).Contains(e.KeyChar)
    14. End If
    15. If txt.Text.Contains("-") AndAlso txt.SelectionStart = 1 Then
    16. e.Handled = Not ("0123456789" & Convert.ToChar(Keys.Back)).Contains(e.KeyChar)
    17. End If
    18. End Sub
    (Grundsätzlich aber deutet es auf einen Design-Fehler hin, wenn bei dir 60 Textboxen rumfahren.)
    Huhu
    Die kannst einen allgemeinen Code verwenden, der für alle Textboxen funktioniert.

    VB.NET-Quellcode

    1. Private Sub TBPress(sender As Object, e As KeyPressEventArgs) Handles txtX5.KeyPress, txt4.KeyPress ', ...
    2. Dim UsedTB = DirectCast(sender, TextBox)
    3. If UsedTB.SelectionStart = 0 Then
    4. e.Handled = Not ("0123456789-" & Convert.ToChar(Keys.Back)).Contains(e.KeyChar)
    5. End If
    6. 'usw.
    7. End Sub


    Also dann den Namen der TB durch den Namen der Variable erstzen.
    Du musst dann halt nur, dass KeyPress Event jeder Textbox abonnieren (geht zur Not auch im Designer)
    Hallo
    Danke euch, beide Codes funktionieren einwandfrei.
    Damit kann ich das Thema beenden.
    @ErfinderDesRades
    (Grundsätzlich aber deutet es auf einen Design-Fehler hin, wenn bei dir 60 Textboxen rumfahren.)
    es fahren noch mehr Textboxen rum.
    Das ganze ist eine Vektor Berechnung.
    Diese 60 Textboxen sin dafür da um die X,Y,Z Werte einzugeben,
    diese werden dann in anderen Textboxen(oder auch Labels), in Vektor Länge, und Winkel zwischen Vektoren Berechnet.
    Noch einmal Danke.
    MfG. Willi