KeyDown Event - Pfeil nach oben

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von NicoHood.

    KeyDown Event - Pfeil nach oben

    VB.NET-Quellcode

    1. dim letztenachricht as string
    2. Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    3. If e.KeyCode = Keys.Enter Then
    4. letztenachricht = TextBox1.Text
    5. sendmessage(textbox1.text)
    6. ElseIf e.KeyCode = Keys.Up Then
    7. TextBox1.Text = letztenachricht
    8. ElseIf e.KeyCode = Keys.Tab Then
    9. textbox1.clear()
    10. End If
    11. End Sub


    Ich habe mir einen kleinen Chat gebaut, in dem man über Textbox1 die Nachrichten verschickt wenn man auf Enter drückt. Das klappt soweit ganz gut. Ich will aber auch noch dass wenn man den Pfeil nach oben drückt die letzte Nachricht, die man geschrieben hat erscheint, und wenn man Tab drückt, die Textbox leer wird. Aber aus irgendeinem Grund passiert bei obigem Code bei Pfeil nach oben und Tab gar nichts.
    Ich hoffe hier kann mir jemand helfen.


    mfg

    VB.NET-Quellcode

    1. dim letztenachricht as string
    2. Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    3. If e.KeyCode = Keys.Enter Then
    4. e.SuppressKeyPress = True
    5. letztenachricht = TextBox1.Text
    6. sendmessage(textbox1.text)
    7. ElseIf e.KeyCode = Keys.Up Then
    8. TextBox1.Text = letztenachricht
    9. ElseIf e.KeyCode = Keys.Tab Then
    10. e.SuppressKeyPress = True
    11. textbox1.clear()
    12. End If
    13. End Sub


    Es funktioniert immer noch nicht so, wie der Code jetzt ist.

    Vatter schrieb:

    Hast du ma Haltepunkte gesetzt und nachgeschaut, ob das Ereignis ausgelöst wird und was für ein Keycode dann ansteht?
    ?
    Dieser Post scheint dich nicht sonderlich interessiert zu haben. :cursing:
    Sonst hättest du bemerkt, dass die Tab-Taste (wie bereits oben erwähnt) kein Keydown auslöst.
    Wenn man nun (etwas Eigeninitive vorausgesetzt) die Eigenschaften der ToolstripTextbox im Designer durchgeht stellt man fest, dass die Eigenschaft AccepsTab für die Verwendung der TabTaste bei Multiline verwendet wird. Daraus könnte m,an folgern (rein theoreterisch), dass man diese beiden Eigenschaften auf true setzen muß. Und schon funzt das ganze.
    Also, in Zukunft auch ma die Antworten lesen, wenn man Fragen hat. Sonst is alle Hilfe fürn A..... :whistling:
    Fiel fergnügen
    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Hi,
    ich bin neu hier, und habe eine ähnliche Frage zum Thema. Ich konnte bei Google dazu nichts finden, dabei möchte ich etwas ganz simples machen:

    Ein einfaches programm, wo nichts besonderes zu sehen ist. Und wenn man eine bestimmte taste (zb enter) drückt soll eine msgbox erscheinen, mit einem text. Nur leider kann ich das keypress nur in die textbox schreiben, und nicht über das ganze programm laufen lassen.


    Ich hab mich mal am obrigen Code orientiert. Es funktioniert, jedoch muss ich dabei mich in einer textbox befinden. wenn ich auserhalb dieser bin, bringt Enter zu drücken gar nichts. Doch das möchte erreichen.
    Mein Code:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown 'soll sich aber nicht auf die textbox beziehen, sondern auf das gasammte programm
    2. If e.KeyCode = Keys.Enter Then
    3. MsgBox("Es klappt!!!")
    4. End If
    5. End Sub
    Me.KeyDown hatte ich schon getestet. Das funktioniert leider nicht, auch in kombination nicht.
    Es funktioniert weiterhin nur in der Textbox.

    Eigentlich ist die Sache so simpel, es gibt aber keine Lösung?

    Edit: bei
    Handles TextBox1.KeyDown, Button1.KeyDown
    Klappt es bei selektiertem Button auch nicht, nur in der Textbox.

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

    Besteht dein progamm aus nur einer Form, bzw. willst du das KeyEvent aus anderen Formen heraus auslösen?
    Oder besteht deine Form aus weiteren Containern oder Elementen, die den Fokus haben könnten?
    edit: Bei Button ist es das gleiche wie oben beschrieben

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vb-programmer“ ()

    Ich habe dir mal ein Bild, meines momentanen Programmes gesendet. Dies hat nur normale Stopuhr funktionen. Ich weiß nicht, ob dir das Bild weiterhilft, nur kann ich dir deine Frage nicht richtig beantworten (Hab gestern erst angefangen)

    Das event sollte möglichst dann ausgelöst werden, wenn ich im programmfenster die taste drücke.
    Bilder
    • Beispielbild.png

      43,81 kB, 519×520, 220 mal angesehen
    Im KeyDown Event der Form abfragen? Und KeyPreview auf True setzen.

    //
    Du könntest ja quasi ein "globales" KeyDown Event erstellen, und bei Handles dann alle Controls auflisten, für die das KeyDown Event gelten soll.

    VB.NET-Quellcode

    1. Private Sub MyKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown, Button1.KeyDown ... ...
    2. 'Deine Tastenabfrage
    3. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Unwesen“ ()

    Ich habe herausgefunden, warum es nicht geht. Ich wollte ständig Enter als Taste nehmen. Aber da man mit dieser Taste das programm steuern kann wird diese auf Buttons blockiert, und bei Druck wird der Button geklickt, nicht die msgbox angezeigt.
    Das heißt, man muss etwas anderes wie Leer oder Enter nehmen, zb F1. Mein code sieht wie folgt aus:

    VB.NET-Quellcode

    1. Private Sub MyKeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    2. If e.KeyCode = Keys.F1 Then
    3. MsgBox("4Es klappt!!!")
    4. End If
    5. End Sub



    Vielen Dank an alle, die mir helfen konnten. Und viel Spaß denen, denen es etwas gebracht hat ;)