Wie die Tastenabfrage in der Prozedur 'Validated'

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Wie die Tastenabfrage in der Prozedur 'Validated'

    Hallo zusammen,

    ich muss in der Prozedur 'Validated' die Escape-Taste abfragen.
    Bisher ohne Erfolg.
    Kann mir bitte da jemand helfen?

    Gruß George

    Private Sub txtTest_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTest.Validated

    '' wenn die Escape-Taste gedrückt wurde, soll die Prozedur beendet werden.
    '' wie wird die Taste in dieser Proz. abgefragt?

    End SubWie
    Dazu solltest Du Dir überlegen, wann die Prozedur aufgerufen wird. Das geschieht nämlich, wenn Du z.B. die TextBox verlässt oder wenn Du DeinForm.ValidateChildren aufrufst => Keiner der Fälle, in denen die Escapetaste gedrückt wird => nicht abfragbar. Oder unter welchen Umständen wird die Prozedur bei Dir ausgelöst?
    Ansonsten bist Du ggf. in der falschen Prozedur. Schau mal bei den Events txtTest.KeyDown oder txtTest.KeyUp vorbei, nicht beim Validated-Event.
    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.
    Ok, ich habe diese Prozedur gewählt.
    Warum?
    Es wird ständig kontrolliert wieviel Zeichen eingegeben wurden.
    Bei einer bestimmten Anzahl der Zeichen wird in der Prozedur etwas
    ausgelöst. Sollte aus bestimmten Gründen die Anzahl der Zeichen nicht
    erreicht sein und dann z.B. ein Abbruchtaste gedrückt wurde, muss der weitere
    Ablauf in der Prozedur gestoppt werden.
    Wenn das alles, so wie du sagst nicht machbar ist, werde ich natürlich
    versuchen das so zu lösen wie du es beschrieben hast. Das wäre
    eigentlich auch die Standardart.
    Mir geht es auch nur um das Wissen ob es so funktionieren könnte, wie
    ich es mir gedacht hatte.

    Gruß George

    George schrieb:

    Es wird ständig kontrolliert wieviel Zeichen eingegeben wurden.
    Bei einer bestimmten Anzahl der Zeichen wird in der Prozedur etwas
    ausgelöst. Sollte aus bestimmten Gründen die Anzahl der Zeichen nicht
    erreicht sein und dann z.B. ein Abbruchtaste gedrückt wurde, muss der weitere
    Ablauf in der Prozedur gestoppt werden.

    Diese Anforderungen ließen sich einfach erfüllen:

    VB.NET-Quellcode

    1. Private Sub txtTest_KeyDown(sender As Object, e As KeyEventArgs) Handles txtTest.KeyDown
    2. If e.KeyCode = Keys.Escape Then MachWasImmerPassierenSoll
    3. If txtTest.TextLength = 16 Then TextIstVollständig
    4. End Sub

    Die Längenprüfung kann auch alternativ im TextChanged-Event erfolgen:

    VB.NET-Quellcode

    1. Private Sub txtTest_TextChanged(sender As Object, e As EventArgs) Handles txtTest.TextChanged
    2. If txtTest.TextLength = 16 Then TextIstVollständig
    3. End Sub


    George schrieb:

    Mir geht es auch nur um das Wissen ob es so funktionieren könnte, wie
    ich es mir gedacht hatte.
    Nein, da die Validated-Prozedur als EventHandler nur dann automatisch aufgerufen wird, wenn das Validated-Event gefeuert wird. Und wann das geschieht, schrieb ich in Post#2. Außerdem werden da nicht irgendwelche Tastendaten gesendet/mitgeliefert. Ist aufgrund der Natur des Validated-Ereignisses ja klar. Daher ist das m.E. nicht (sinnvoll) umsetzbar, was Du im Zusammenhang mit Validated vorhast.
    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.
    Meiner Meinung nach sollte man nicht zu viele Events für eine Operation verwenden, sondern versuchen, mit so wenige als möglich aus zu kommen...

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    2. If e.KeyChar = Convert.ToChar(Keys.Escape) Then Stop ' mache hier irgend etwas...
    3. e.Handled = Not ("0123456789".Contains(e.KeyChar) AndAlso TextBox1.Text.Length < 7)' hier werden in der Textbox nur Zahlen bis zu einer Textlänge von 8 Zeichen zugelassen
    4. End Sub
    Wenn's um Textlängenbegrenzung und erlaubte Zeichen geht, dann ev. so...