none
Wie bekomme ich das gedrückte Zeichen aus den KeyEventArgs RRS feed

  • Frage

  • Hallo zusammen,

    ich habe folgende Problematik.

    In einer Anwendung wenn eine bestimmte Tastenkombination gedrückt wird, dann startet ein Timer.

    Sobald die Zeit abgelaufen ist, sollen alle Zeichen die gedrückt wurden gespeichert werden.

    Darum habe ich ein Behavior gebaut welches mit dieses liefert. Auf das MainWindow_KeyDown event reagiere ich und bekomme die KeyEventArgs. Nur steckt da nur Müll drin.

    Ich will nicht wissen ob er Num1 oder D1 gedrückt hat, sondern ob es die 1 war. Genaus bei den Sondertasten (OEMPeriod,...). Das ganze sollte sich der gewählten Sprache anpassten (',' oder '.').

    Weitere Einschränkung ist, dass ich keinen DLLImport nutzen möchte.

    Es muss doch in WPF eine einfache Möglichkeit geben aus den KeyEventArgs sich das Zeichen, was er da eingeben wollte, herauszuziehen.

    Das ganze muss übrigens dann "nur noch" CaseSensitive sein...

    Für Ratschläge und Anmerkungen bin ich dankbar.

    Grüße

    JP One

    Dienstag, 6. Mai 2014 11:41

Antworten

  • Hallo,

    folgende Lösung hab ich nun implementiert.

    Ein Behavior das im Attach die Events für PreviewKeyDown und TextInput anmeldet.

    Im PreviewKeyDown wird die Testenkombination abgefragt die ich benötige und dann eine Variable gesetzt.

    Ab jetzt wird im TextInput jedes Zeichen aufgezeichnet (dort bekommt man über die TextCompositionEventArgs.Text genau das Zeichen welches eingegeben wurde).

    Sobald dann die Zeit abgelaugen ist wird die Variable für den TextInput wieder zurückgesetzt.

    Das hat mir jetzt als Lösung geholfen und wurde auch so abgenommen.

    Vielen Dank an alle Antworten und Hilfestellungen hier :)

    • Als Antwort markiert JP One Mittwoch, 21. Mai 2014 08:20
    Mittwoch, 21. Mai 2014 08:20

Alle Antworten

  • Hi,

    so wirklich habe ich nicht verstanden, wo dein Problem liegt, bzw. warum in den KeyEventArgs nur "Müll" drinstecken soll. Evtl. hast Du ja nur Verständnisprobleme bei der Auswertung der Werte.

    Poste doch mal bitte deinen Code und dazu eine genauere Beschreibung, was der User eingeben soll, was dann genau passiert und welche Zeichen Du wie abfangen willst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 6. Mai 2014 11:46
  • Hi,

    in den KeyEventArgs steckt nicht das Zeichen drin welches gedrückt wurde, sondern nur der Enum für den gedrückten Key.

    Somit müsste ich eine eleding lange Anweisung bauen die mir das gedrückte Zeichen herausgibt. Dann muss ich das ganze noch in allen Sprachen anpassen, welches aber auch nicht den gewünschten Zweck erfüllt.

    Siehe auch KeyEventArgs.

    Ich habe jetzt eine andere Möglichkeit gefunden, die mir zwar auch nicht so gut gefällt, aber immerhin das gewünschte Ergebnis liefert.

    Das TextInputEvent. Dort kann ich einfach den Text nehmen und bekomme genau das Zeichen das ich haben wollte.

    Dennoch finde ich dies als Workaround und nicht gerade einfach.

    In WindowsForms soll das alles anders sein laut meinen Recherchen.

    • Als Antwort markiert JP One Mittwoch, 21. Mai 2014 08:14
    • Tag als Antwort aufgehoben JP One Mittwoch, 21. Mai 2014 08:20
    Dienstag, 6. Mai 2014 12:18
  • Hallo,
    da KeyDown nicht KeyPress ist, kannst du nicht erwarten einfach das gedrückte Zeichen zu bekommen. Das gibt es schließlich nicht immer. In Windows Forms ist es nur wenig anders. Erhalten tust du dort auch nur einen Wert der Keys-Enumeration. Zusätzlich hättest du Probleme alle Tastaturevents abzufangen, da TextBoxen (Buttons, ...) die Events in WinForms abfangen (Lösung: IMessageFilter). In WPF musst du nur eines der Preview-Events nutzen, da kann das nicht passieren.

    Da InterOp (DllImport, ...) keine Probleme macht, wenn man es richtig anwendet, gucke dir mal das hier an. Dort hast du alles, was du brauchst. Wenn TextInput allerdings keine Probleme macht, kannst du auch dabei bleiben.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort vorgeschlagen Stefan Falz Dienstag, 20. Mai 2014 21:19
    Dienstag, 6. Mai 2014 15:07
    Moderator
  • Hallo,

    folgende Lösung hab ich nun implementiert.

    Ein Behavior das im Attach die Events für PreviewKeyDown und TextInput anmeldet.

    Im PreviewKeyDown wird die Testenkombination abgefragt die ich benötige und dann eine Variable gesetzt.

    Ab jetzt wird im TextInput jedes Zeichen aufgezeichnet (dort bekommt man über die TextCompositionEventArgs.Text genau das Zeichen welches eingegeben wurde).

    Sobald dann die Zeit abgelaugen ist wird die Variable für den TextInput wieder zurückgesetzt.

    Das hat mir jetzt als Lösung geholfen und wurde auch so abgenommen.

    Vielen Dank an alle Antworten und Hilfestellungen hier :)

    • Als Antwort markiert JP One Mittwoch, 21. Mai 2014 08:20
    Mittwoch, 21. Mai 2014 08:20