Vérifier si une clé est Lettre/Chiffre/Symbole Spécial
Je remplace ProcessCmdKey
et quand je suis Keys
argument, je veux vérifier si ce Keys
est Lettre ou un Chiffre ou un Symbole Spécial.
J'ai cet extrait
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
char key = (char)keyData;
if(char.IsLetterOrDigit(key)
{
Console.WriteLine(key);
}
return base.ProcessCmdKey(ref msg, keyData);
}
Tout fonctionne pour les lettres et les chiffres. mais quand j'appuie sur F1-F12, il les convertit en lettres.
Peut-être que quelqu'un connaît une meilleure façon de résoudre cette tâche?
Le problème est que vous êtes casting
Peut-être vous pouvez Essayer stackoverflow.com/questions/887377/...
keyData
à un personnage. Vous ne pouvez pas le faire. Vous devez utiliser les constantes définies dans la Keys
énumération pour obtenir cette information.Peut-être vous pouvez Essayer stackoverflow.com/questions/887377/...
OriginalL'auteur Zlobaton | 2011-04-19
Vous devez vous connecter pour publier un commentaire.
Remplacer la forme du
OnKeyPress
méthode à la place. LeKeyPressEventArgs
fournit unKeyChar
propriété qui vous permet d'utiliser les méthodes statiques surchar
.Comme mentionné par Cody Gris dans les commentaires, cette méthode déclenche uniquement sur les principaux traits de caractère de l'information. D'autres coups de clés tels que F1-F12 devrait être traitée dans
OnKeyDown
ouOnKeyUp
, selon votre situation.De MSDN:
Exemple
ProcessCmdKey
, et il est soumis à l'absence de certaines combinaisons de touches pour diverses raisons. Si cela fonctionne pour vos besoins, grande. Mais il est important de réaliser qu'il ne pourrait pas—il n'est pas un simple remplacement présentant des fonctionnalités équivalentes et le but.Certainement pas,
OnKeyPress
ne fournit que lesKeyChar
et rien d'autre, c'est pourquoi il est convenable que cette situation spécifique. D'autres coups de clés devraient être traitées dansOnKeyDown
... ou
OnKeyUp
pour cette question. J'ai mis à jour la réponse avec plus d'info.OriginalL'auteur bernhof
Essayer
comment à ce sujet édité réponse?
OriginalL'auteur Bala R
Essayez d'utiliser
keyData.Mot de code
et peut-être même l'essai dans une fourchette au lieu d'utiliser le Char.IsLetterOrDigit. par exemple,+ = - / \ ?
et de l'e.t.cTu veux dire
Keys.Add
,Keys.Subtract
,Keys.Divide
, etc.?Et bang, tous les utilisateurs de votre logiciel de l'utilisation d'un non-latines clavier (par exemple, russe, grec, Hindi, ...) expérience complètement brisé logiciel. Il y a une raison pour l'existence de
char.IsLetterOrDigit
et coll. — les utiliser.Je veux dire tous les symboles que vous pouvez taper.
Le point, j'ai été en soulignant était
KeyCode
existe (et de ne pas commencer avec un plâtre). Vous avez tout à fait raison, il ne serait pas universelle.OriginalL'auteur Brad Christie
Définir symbole spécial.
+ = - / \ ?
et de l'e.t.cOriginalL'auteur Cheng Chen
vous avez besoin d'un géant de l'interrupteur/cas de déclaration ou de vérifier les plages. Vous pouvez trouver plus facile de vérifier pour les touches que vous souhaitez exclure, selon qui il y a de moins en moins de. Regardez ce pour toutes les valeurs possibles. http://msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx
ou
OriginalL'auteur Charles Lambert
J'ai essayé le code suivant, mais pour une raison quelconque char.IsLetter() la méthode est reconnaissant les touches suivantes Lettres???
F1, F8, F9, F11, F12, RightShift, LeftShift, RightAlt, RightCtrl, LeftCtrl, La Combinaison Windows Gauche, RightWin, NumLock.
Cette méthode ne semble pas être qui complète la preuve de ce qu'il pense être une lettre.
OriginalL'auteur RobHurd