web-dev-qa-db-fra.com

Obtenez le caractère de la clé

Je code un éditeur de texte personnalisé et j'utilise des événements KeyDown et KeyUp. Cet événement obtient un KeyEventArgs à partir de paramètres où une instance "Key" est incluse.

Comment puis-je transformer cette "clé" en un vrai personnage?

Utilisation de Key.ToString () avec un "." J'obtiens un "OmePeriod" ou avec "," j'obtiens un "OmeComma". Je peux transformer ces valeurs directement ... mais c'est un travail difficile, et je suis sûr qu'il doit exister n'importe quelle classe qui transforme ces clés en véritable "char".

Merci!

Cordialement.

19
Jesús Galindo

Le problème principal ici est que l'événement que vous attrapez est un événement de clavier à bobine et que la clé est en effet une clé et NON un caractère. Entre les deux, le clavier! Par exemple, lorsque vous tapez shift-A, vous recevrez deux événements au lieu d'un pour les touches.

cette discussion peut aider: C # Comment traduire un keycode virtuel en char?

5
VdesmedT

Au lieu d'utiliser l'événement KeyDown, essayez d'utiliser l'événement TextInput. Attachez un gestionnaire d'événements qui ressemble à ceci:

private void Grid_TextInput(object sender, TextCompositionEventArgs e)
{
    Char keyChar = (Char)System.Text.Encoding.ASCII.GetBytes(e.Text)[0];
    Debug.WriteLine(keyChar);
}

Remarque, cela n'accroche que le premier octet, et cela ne fonctionnera pas pour le texte international (Unicode). Cela peut ne pas fonctionner pour les événements de saisie de texte plus complexes, alors soyez avisé!

Voir cet article MSDN pour plus d'informations.

5
markmuetz

Cela vous donne exactement ce dont vous avez besoin .... ce caractère trop spécifique à la région du code du clavier ...

comment capturer le caractère '#' sur différents claviers locaux dans WPF/C #?

3
WPF-it

Utilisez la propriété KeyEventArgs.Key et les éléments suivants: Comment convertir un caractère en valeur System.Windows.Input.Key Enum équivalente , mais utilisez plutôt ce qui suit: - Méthode KeyInterop.VirtualKeyFromKey

0
Paul