Tastenkombi (Strg+E) im KeyPress Event

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

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Tastenkombi (Strg+E) im KeyPress Event

    Hallohallo
    Ich möchte gerne im KeyPress Event auf die Tastenkombination Strg + E reagieren.
    Ich schaffe dies aber nur im KeyDown Event:

    VB.NET-Quellcode

    1. Private Sub Mainform_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    2. 'Tastenkombination Strg+E zum Mailversand
    3. If My.Computer.Keyboard.CtrlKeyDown = True Then
    4. If e.KeyCode = Keys.E Then
    5. Sendmail()
    6. End If
    7. End If
    8. End Sub

    Wir wandel ich diesen Code um, damit ich ihn in mein bereits bestehendes KeyPress Event integrieren kann?
    @DerSmurf So was:

    VB.NET-Quellcode

    1. Private Sub Mainform_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    2. 'Tastenkombination Strg+E zum Mailversand
    3. If My.Computer.Keyboard.CtrlKeyDown Then
    4. If e.KeyCode = Keys.E Then
    5. Sendmail()
    6. Return
    7. End If
    8. End If
    9. ' Dein bisheriger Code
    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!
    @RodFromGermany: Jetzt bin ich mal so dreist und verwende Dein: WHAT :?:
    Was hat das mit KeyPress zu tun und wo ist der relevante Unterschied zu Post#1? Da es keinen weiteren/sonstigen »bisherigen Code« gibt, ist das Return überflüssig.

    ##########

    @DerSmurf
    Da Strg+E ein Sonderzeichen ergibt, kannst Du das nutzen: Form.KeyPreview auf True schalten und dann:

    VB.NET-Quellcode

    1. Private Sub FrmMain_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
    2. If e.KeyChar = Convert.ToChar(5) Then MessageBox.Show("Mail was sent.")
    3. 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.

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

    VaporiZed schrieb:

    wo ist der relevante Unterschied zu Post#1?

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. Return

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. ' Dein bisheriger Code
    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!
    Danke @VaporiZed

    @RodFromGermany

    VaporiZed schrieb:

    Was hat das mit KeyPress zu tun und wo ist der relevante Unterschied zu Post#1?

    Sorry, aber da muss ich mich anschließen.

    Edit:

    ErfinderDesRades schrieb:

    Geht nicht.

    Vaporizeds Lösung geht einwandfrei
    @ErfinderDesRades: Warum nicht? Klappt bei mir. Auch wenn der Fokus in ner TextBox ist.
    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.

    ErfinderDesRades schrieb:

    Geht nicht.
    Doch:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Me.KeyPreview = True
    4. End Sub
    5. Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    6. If e.Control AndAlso e.KeyCode = Keys.E Then
    7. Label1.Text = "Jetzt"
    8. End If
    9. End Sub
    10. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    11. Label1.Text = String.Empty
    12. End Sub
    13. End Class

    DerSmurf schrieb:

    Wir wandel ich diesen Code um, damit ich ihn in mein bereits bestehendes KeyPress Event integrieren kann?
    indem Du Deinen vorhandenen Code dort einfügst.
    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!

    RodFromGermany schrieb:

    indem Du Deinen vorhandenen Code dort einfügst.

    Wenn "dort" deine Sub - bzw. ja eigentlich meie Sub aus Post#1) meint, dann haben wir ja das KEYDOWN Event.
    Der Code sollte ja aber ins KEYPRESS EVENT

    wenn "dort" meint, dass ich deinen (meinen aus Post#1) Code ins KeyPress Event einfügen soll, ist dieser dort natürlich nicht lauffähig.

    Aber wie gesagt, @VaporiZed Lösung geht einwand frei. Thema ist erledigt.

    Edit: Sorry, ich kan tun was ich will - der Text da oben will nicht mehr kleiner werden.

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

    DerSmurf schrieb:

    Der Code sollte ja aber ins KEYPRESS EVENT
    Hab ich inzwischen gemerkt. :sleeping:
    Warum nicht das KeyDown- oder KeyUp-Event?
    Im KeyPress-Event bekommst Du das AutoRepeat der Tastatur zu spüren, und wenn Du die Tastenkombination eine Weile lang drückst, gehen da wohl mehrere Mails raus:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim count As Integer = 0
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.KeyPreview = True
    5. End Sub
    6. Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    7. If e.Control AndAlso e.KeyCode = Keys.E Then
    8. Label1.Text = "Jetzt"
    9. End If
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. Label1.Text = String.Empty
    13. ListBox1.Items.Clear()
    14. count = 0
    15. End Sub
    16. Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyBase.KeyPress
    17. If Convert.ToInt32(e.KeyChar) = 5 Then
    18. ListBox1.Items.Add(count.ToString)
    19. count += 1
    20. End If
    21. End Sub
    22. End Class

    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!
    Jou, merkwürdig.
    Allerdings ist das KeyPress-Event wohl nicht für solch designed, eher, um mit AutoRepeat umzugehen.
    Deswegen gibt es da nur die Property Handled.
    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!