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? p>
actuellement je fais p> 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. P> p>
4 Réponses :
Si vous gérez l'événement KeyPress CODE> au lieu de
Clé Code>, le
KeyPresseEventargs CODE> 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 code> ou Char.Control pour filtrer ce que vous voulez. p>
Si vous ne voulez que des caractères imprimables, vous ne voulez probablement probablement pas 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 em>. Ceux-ci peuvent facilement être filtrés avec 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 ( ONKEYDOOD code>. Vous devriez utiliser
onKeyPress code> à la place, ce qui s'appelle seul em> pour caractères imprimables (plus ou moins) et applique des traductions pour les touches de modificateur (décalage, principalement).
char.iscontrol code>, cependant. P>
'\ b' code> ou
(char) 8 code>) est de supprimer le dernier caractère de votre tampon. Il est facile d'oublier de faire cela. P> p>
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
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;
}
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.