Ich verarbeite das Key-Down-Event auf einem meiner Steuerelemente. Wenn die gedrückte Taste eine tatsächliche Eingabe ist (alphabetisch, numerisch oder irgendein Symbol), möchte ich sie an eine Zeichenfolge anhängen, die ich habe. Wenn es ein Steuerzeichen ist (Enter, Escape, etc ..) will ich nichts machen.
Gibt es eine schnelle und einfache Möglichkeit festzustellen, ob es sich bei dem Tastencode um ein druckbares Zeichen oder ein Steuerzeichen handelt?
Momentan mache ich
%Vor%Aber ich weiß, dass es wahrscheinlich ein paar weitere Schlüssel gibt, die mir egal sind, dass ich etwas Wichtiges im System-Handler mache, also möchte ich nicht mit ihnen umgehen.
Wenn Sie nur druckbare Zeichen möchten, möchten Sie wahrscheinlich nicht OnKeyDown
. Sie sollten stattdessen OnKeyPress
verwenden, was für druckbare Zeichen (mehr oder weniger) nur heißt, und Übersetzungen für Modifier-Schlüssel anwenden (hauptsächlich Shift).
Ich sagte "mehr oder weniger" oben, weil Sie auch Kontrollzeichen bekommen, die nicht unbedingt druckbar sind. Diese können jedoch leicht mit char.IsControl
herausgefiltert werden.
Etwas, das in einem Design wie diesem leicht zu übersehen ist, ist die Rücktaste. In der Regel besteht das beste Verhalten beim Empfang eines Rückschrittzeichens ( '\b'
oder (char)8
) darin, das letzte Zeichen aus dem Puffer zu entfernen. Es ist leicht zu vergessen, dies zu tun.
Wenn Sie das KeyPress
-Ereignis anstelle von KeyDown
behandeln, hat das KeyPressEventArgs
eine KeyChar Eigenschaft. Dadurch wird die Anzahl der zusätzlichen Schlüsselereignisse reduziert. Sie können dann etwas wie char.IsLetterOrDigit
oder char.IsControl verwenden, um was zu filtern du willst.
Angenommen, Sie haben nur KeyCode
, können Sie P / Invoking in MapVirtualKey Funktion. Ich bin mir nicht sicher, ob das für alle Kulturen funktionieren wird.
Ausgabe:
%Vor%