10
votes

Comment déterminer si le code clé est un caractère imprimable

Je gère la clé de l'événement de la clé sur l'un de mes contrôles. Si la touche appuyée est une entrée réelle (alphabétique, numérique ou symbole de quelque sorte), je veux l'ajouter à une chaîne que j'ai. S'il s'agit d'un caractère de contrôle (entrez, évitez, etc.) Je ne veux rien faire.

Y a-t-il un moyen rapide et facile de déterminer si le code de clé est un caractère imprimable ou un caractère de commande?

actuellement je fais xxx

Mais je sais qu'il y a probablement quelques autres clés, je me soucie de cela faire quelque chose d'important dans le gestionnaire de système, je ne veux donc pas les gérer.


0 commentaires

4 Réponses :


6
votes

Si vous gérez l'événement KeyPress au lieu de Clé , le KeyPresseEventargs aura un KeyChar propriété. Cela réduira le nombre d'événements clés «supplémentaires» que vous obtenez. Vous pouvez ensuite utiliser quelque chose comme char.isletterordigit ou Char.Control pour filtrer ce que vous voulez.


0 commentaires

13
votes

Si vous ne voulez que des caractères imprimables, vous ne voulez probablement probablement pas ONKEYDOOD . Vous devriez utiliser onKeyPress à la place, ce qui s'appelle seul pour caractères imprimables (plus ou moins) et applique des traductions pour les touches de modificateur (décalage, principalement).

i dit "plus ou moins" ci-dessus, parce que vous obtiendrez également des caractères de contrôle, qui ne sont pas nécessairement imprimables . Ceux-ci peuvent facilement être filtrés avec char.iscontrol , cependant. xxx

quelque chose facile à négliger dans une conception comme celle-ci est la clé arrière. Typiquement, le meilleur comportement lors de la réception d'un caractère de retour arrière ( '\ b' ou (char) 8 ) est de supprimer le dernier caractère de votre tampon. Il est facile d'oublier de faire cela.


0 commentaires

4
votes

en supposant que vous n'avez que le code code> code>, vous pouvez essayer p / appeler dans le MAPVirtualKey fonction. Je ne sais pas si cela fonctionnera pour toutes les cultures.

false
false
true
true


0 commentaires

-1
votes

Vérifiez cette fonction, vous voudrez peut-être lancer char code> sur octet code> (ou modifier simplement la fonction):

bool IsPrintable(byte item)
{
    // Range of chars from space till ~ (tilda)
    return item >= 32 && item < 126;
}


1 commentaires

Cela ne fonctionnerait que pour les caractères imprimables latins. Il ignore complètement tous les autres alphabets et manque beaucoup de symboles imprimables. La coulée également du caractère de l'octet rejetera également les informations. Les caractères C # sont 16 bits.