KeyDown Event/Verarbeitung läuft verzögert

  • VB.NET
  • .NET 4.5

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Toorms.

    KeyDown Event/Verarbeitung läuft verzögert

    Mahlzeit Zusammen,

    nutze es nur selten, habe aber gerade wirklich mal Gebrauch von gemacht: KeyDown Event. Was mir dabei aufgefallen ist, ist folgendes:
    • Frage den Key im KeyDown-Event per If ab und lasse dann einen String ändern sowie ein Label.Text ändern. Das Label.Text ändert sich aber nur sehr verzögert. Wenn ich die Anwendung also starte und dann F10 für beispielsweise Label.Text = "F10" drücke und direkt danach F9 für Label.Text = "F9" drücke, ändert er das Label nicht direkt, ich muss quasi ein paar Sekunden warten und dann erneut F9 drücken, damit das Label entsprechend geändert wird.
    Hatte diese Problematik von euch schon mal jemand oder kennt sich damit jemand genauer aus? Habe auch schon mit Label.Refresh() und ctlStatusBar.Refresh() (weil das Label innerhalb der Statusbar liegt) gearbeitet; aber auch hier ohne wirklich Erfolg. Es ist kein Drama, wollte es aber nur mal allgemein wissen.

    Grüße und schönes Wochenende
    Toorms
    @Toorms Dieses Verhalten ist mir absolut nicht geläufig.
    Was machst Du sonst noch so im KeyDown-Event oder in der IdleTime?
    Poste mal ein Rumpfprojekt ohne Binaries, das den Effekt reproduziert.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Gerne doch ... hier mal der Code vom Event.

    VB.NET-Quellcode

    1. Private Sub frmMain_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    2. If e.KeyCode = Keys.F9 Then
    3. mstrTargetPath = "\\path\T"
    4. lblTargetPathChar.Text = "T"
    5. lblTargetPathChar.ForeColor = Color.Green
    6. lblTargetPathChar.Refresh()
    7. ctlStatusStrip.Refresh()
    8. ElseIf e.KeyCode = Keys.F10 Then
    9. mstrTargetPath = "\\path\K"
    10. lblTargetPathChar.Text = "K"
    11. lblTargetPathChar.ForeColor = Color.Red
    12. lblTargetPathChar.Refresh()
    13. ctlStatusStrip.Refresh()
    14. End If
    15. End Sub


    Eigentlich nichts wildes. Den Refesh habe ich da mal dringelassen. Im Konstruktor steht derzeit noch ein Label.Text="XY" .. aber das wird beim ersten Tastendruck auf F9 oder F10 überschrieben.
    @Toorms Klingt blöd, aber es ist so.
    Drücke ich abwechselnd F9, F10, F9, F10, F9, F10, F9, F10, F9, F10.
    kommt so was an:
    F9, F10, F10, F10, F9, F10, F10, F10.
    ;(
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Könnte eventuell an dem liegen.

    Gleich in die erste Zeile

    VB.NET-Quellcode

    1. e.SuppressKeyPress = True



    Edit: Durch Festlegen von SuppressKeyPress auf true wird auch Handled auf true festgelegt.
    Steht übrigens alles auf der MSDN-Seite, am Besten mal rein schauen.

    Freundliche Grüsse


    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Es fehlt in jedem Block das e.Handled = True. Denn mit F10 landet man im Fenstermenü. Als Beweis einfach nach F10 nach unten drücken, dann kommt das Menü. 2x F10 => Fenstermenü wieder verlassen. Hab ich durch Probieren rausgefunden, als ich mir in ner ListBox anzeigen ließ, welche KeyCodes erfasst werden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @Toorms Brauchst Du nicht. :thumbsup:
    Da Du siehst, dass ich @VaporiZed ein Hilfreich gegeben habe, nachdem ich mich vergeblich am Thema versucht habe,
    kannst Du mit Recht annehmen, dass ich das getestet habe.
    Es hätte auch mit zwei anderen Nicht-F-Tasten funktioniert. ;)
    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).
    VB-Fragen über PN / Konversation werden ignoriert!