Tastenkombination Strg + K in KeyPress?

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

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    Tastenkombination Strg + K in KeyPress?

    Hallo
    Ich nutze das KeyPress Event für einige verschiedene Tastenanschläge.
    Hier wollte ich nun auch die Tastenkombination Strg und K abfangen.
    Jedoch finde ich keine Möglichkeit dies im KEYPRESS Event zu tun.
    Deswegen habe ich noch ein KeyDown Event eingefügt:

    VB.NET-Quellcode

    1. ​Private Sub FrmMainForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    2. If e.KeyCode = Keys.K And e.Modifiers = Keys.Control Then
    3. MessageBox.Show("Strg + K")
    4. End If
    5. End Sub

    Das klappt.

    Nun muss ich aber im KeyPress Event die Steuerungstaste abfangen und die Sub abbrechen. Denn im KeyPress Event beschreibe ich eine Textbox, ohne dass diese den Fokus hat:

    VB.NET-Quellcode

    1. Private Sub FrmMainForm_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
    2. '[...]
    3. 'abbrechen, wenn eine Textbox ausgewählt
    4. If Me.TBSearch.Focused Then Exit Sub
    5. If Me.TBSearchArticles.Focused Then Exit Sub
    6. If Me.TBSearchCorder.Focused Then Exit Sub
    7. If Me.TBSearchPW.Focused Then Exit Sub
    8. 'Tasten in TB übergeben
    9. If TCMain.SelectedTab Is TPAddressbook Then TBSearch.AppendText(e.KeyChar)
    10. If TCMain.SelectedTab Is TPArticles Then TBSearchArticles.AppendText(e.KeyChar)
    11. If TCMain.SelectedTab Is TPCustomerOrders Then TBSearchCorder.AppendText(e.KeyChar)
    12. If TCMain.SelectedTab Is TPPasswords Then TBSearchPW.AppendText(e.KeyChar)
    13. End sub


    Nach dem Druck von Strg + K (zum Beispiel) entsteht in der Textbox ein lustiges Quadrat. Das soll da nicht erscheinen.
    Also habe ich im KeyPress Event folgendes versucht:
    ​If e.KeyChar = Convert.ToChar(Keys.Control) Then Exit Sub
    Dies scheitert aber bei jeglicher Kombination mit Strg, im Fehler "System.OverflowException: "Der Wert für ein Zeichen war zu groß oder zu klein."

    Wie bekomme ich das gelöst?
    Indem Du genau dieses Zeichen hernimmst und es als Kriterium verwendest:

    VB.NET-Quellcode

    1. Private Sub FrmMainForm_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
    2. If e.KeyChar = DasZeichen Then 'Strg+K wurde gedrückt.
    3. '…

    Interessant. Ich kann DasZeichen hier nicht einfügen. Es ist das Marssymbol. Allerdings irgendwie nicht das, welches man durch Drücken von Alt+11 erhält. Dann einfach die Tastenkombi drücken und das Zeichen aus der TextBox rauskopieren. Aber nicht mit Strg+C!
    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.
    Sauber. Das klappt.
    Aber das andere Problem(chen) bleibt.
    Durch diese Codezeilen:

    VB.NET-Quellcode

    1. 'Tasten in TB übergeben
    2. If TCMain.SelectedTab Is TPAddressbook Then TBSearch.AppendText(e.KeyChar)
    3. If TCMain.SelectedTab Is TPArticles Then TBSearchArticles.AppendText(e.KeyChar)
    4. If TCMain.SelectedTab Is TPCustomerOrders Then TBSearchCorder.AppendText(e.KeyChar)
    5. If TCMain.SelectedTab Is TPPasswords Then TBSearchPW.AppendText(e.KeyChar)

    werden mir bei jeder Tastenkombination mit der Strg Taste lustige rechtecke in meine Textbox geschrieben.
    Das ist jetzt nicht soooo tragisch, denn das machen ja die wenigsten User, aber schöner wäre trotzdem.
    If e.KeyChar = DasZeichen Then Return?
    Brich einfach die Sub ab, wenn Strg+K gedrückt wird, sodass die Codezeilen zum Beschreiben der TextBoxen nicht aufgerufen werden.
    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.
    Ja das habe ich natürlich.

    VB.NET-Quellcode

    1. Private Sub FrmMainForm_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
    2. 'Enter = Abbruch (KeyDown Event)
    3. If e.KeyChar = Convert.ToChar(Keys.Enter) Then Exit Sub
    4. If e.KeyChar = " " Then
    5. If TCMain.SelectedTab Is TPArticles Then CopyArticle()
    6. If TCMain.SelectedTab Is TPAddressbook Then CopyAddress()
    7. If TCMain.SelectedTab Is TPCustomerOrders Then CopyCustOrder()
    8. Exit Sub
    9. End If
    10. End sub


    Das Problem ist die Kombination mit Strg und einem beliebigem anderen Buchstaben.
    Alle Kombis resultieren in diesem Quadrat in meiner Textbox.
    Da wäre es schön, die Sub bei gedrückter Strg Taste abzubrechen, um eben dies zu unterbinden.
    So wie im geposteten Code Zeile 2 mit der Enter Taste:
    If e.KeyChar = Convert.ToChar(Keys.Enter) Then Exit Sub

    Aber das klappt halt nicht :(

    DerSmurf schrieb:

    Also habe ich im KeyPress Event folgendes versucht:
    If e.KeyChar = Convert.ToChar(Keys.Control) Then Exit Sub
    Dies scheitert aber bei jeglicher Kombination mit Strg, im Fehler "System.OverflowException: "Der Wert für ein Zeichen war zu groß oder zu klein."
    Achso. Na dann:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private CtrlIsPressed As Boolean
    3. Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    4. If e.Control Then CtrlIsPressed = True
    5. End Sub
    6. Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
    7. If CtrlIsPressed Then Return
    8. 'Dein TextBox-Befüllungscode
    9. End Sub
    10. Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
    11. If e.Control Then CtrlIsPressed = False
    12. End Sub
    13. End Class
    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.