i Remplacer tout fonctionne pour les lettres et les chiffres. Mais quand j'appuie sur F1-F12, il les convertit en lettres. P> Peut-être que quelqu'un sait un meilleur moyen de résoudre cette tâche? P> P> processcmdkey code> et quand j'obtiens
clés code> argument, je veux vérifier si ces touches code> sont la lettre ou le symbole spécial. < P> J'ai cet extrait p>
6 Réponses :
Essayez
if( !(keyData >= Keys.F1 && keyData <= Keys.F12)) { char key = (char)keyData; if(char.IsLetterOrDigit(key)) { Console.WriteLine(key); return false; } } return base.ProcessCmdKey(ref msg, keyData);
Je n'ai pas besoin de faire quelque chose lorsque F1-F12 pressé. J'ai besoin de vérifier si j'ai enfoncé une lettre, un chiffre ou un symbole spécial
Essayez d'utiliser keydata.keycode Code>
et peut-être même des tests dans une plage au lieu d'utiliser le caractère char.isletterordigit. E.G.
if (keyData.KeyCode >= Keys.D0 && keyData.KeyCode <= Keys.Z) { ... }
Qu'en est-il des symboles spéciaux + = - / \? code> et e.t.c
@Zlobaton: Vous voulez dire keys.add code>,
clés.subrent code>,
keys.divide code>, etc., etc.?
Et Bang, tous les utilisateurs de votre logiciel qui utilisent un clavier non latin (par exemple, une expérience de logiciel complètement brisé. Il y a une raison de l'existence de char.sletterordigit code> et al. - Utilise les.
Je veux dire tous les symboles que vous pouvez taper.
@Timwi: Le point que je stressait était keycode code> existe (et ne pas commencer par une distribution). Vous êtes absolument raison, ce ne serait pas universel.
if (keyData >= Keys.F1 && keyData <= Keys.F12) { //one of the key between F1~F12 is pressed }
Je n'ai pas besoin de faire quelque chose lorsque F1-F12 pressé. J'ai besoin de vérifier si j'ai enfoncé une lettre, un chiffre ou un symbole spécial
@Zlobaton: Définissez SPÉCIAL SYMBOY I>.
Vous avez besoin d'une déclaration de commutation / cas géante ou de vérification des gammes. Vous trouverez peut-être plus facilement de vérifier les clés que vous souhaitez exclure, selon laquelle il y a moins de. Regardez cela pour toutes les valeurs possibles. http://msdn.microsoft.com/en-us /library/system.windows.forms.keys.aspx ou p>
remplacer la méthode Comme mentionné par Cody Grey dans les commentaires, cette méthode ne tire que sur les coups de clé qui ont des informations de caractère. Les autres traits clés tels que F1-F12 doivent être traités dans de MSDN : P> Les événements clés se produisent dans ce qui suit
Ordre: p>
de la formulaire code> la méthode. Le
keighpressereventargs code> fournit un
keychar code>
propriété qui vous permet d'utiliser les méthodes statiques sur char code>.
ONKEYDOOD code> ou
oneKeUp code>, en fonction de votre situation. P>
Notez que cela se produit à un niveau beaucoup plus élevé que le processcmdkey code>, et il est soumis à certaines touches manquantes pour diverses raisons. Si cela fonctionne pour vos besoins, génial. Mais il est important de réaliser que cela pourrait ne pas - ce n'est pas un remplacement d'abandon de la fonctionnalité et des objectifs équivalents.
Certainement pas, onKeyPress code> ne fournit que le
keychar code> et rien d'autre, c'est pourquoi il est aussi approprié que cette situation spécifique. Les autres traits clés doivent être traités dans
ONKEYDODODDOX CODE>.
.. ou OnKeyUp code> d'ici la matière. J'ai mis à jour la réponse avec plus d'informations.
J'ai essayé le code suivant, mais pour une raison quelconque de la méthode Char.Sletter () reconnaît les clés suivantes en tant que lettres ???
F1, F8, F9, F11, F12, F11, F12, Voyage, Rightsalt, DroiteCtrl, Gauchectrl, gauchers, droit à droite, numlock. P>
Cette méthode ne semble pas être la preuve complète concernant ce qu'elle pense est une lettre. p>
Le problème est que vous casserez
keydata code> à un caractère. Vous ne pouvez pas faire ça. Vous devez utiliser les constantes définies dans la liste code> énumération pour obtenir cette information.
Peut-être que vous pouvez essayer Stackoverflow.com/Questtions/887377/...
En regardant les valeurs des touches code> code> Enum, on pense en effet initialement "Ces valeurs d'énorme sont des codes de caractères". Mais en y réfléchissant, c'est impossible, car a) il y a des clés qui n'ont pas de caractères, par ex.
dormir code>, et b) il y a aussi des clés qui partagent le même caractère, par ex.
d0 code> et
numpad0 code>: même s'ils ont le même caractère
0 code> ils ne peuvent pas tous deux partager à la même valeur Enum, car ils seraient alors indiscernables Ainsi, au moins l'un d'entre eux mappe à une valeur arbitraire. (Je sais que c'est vieux, je voulais juste clarifier pourquoi i> casting ne fonctionne pas.)