2011-08-16 2 views
11

J'ai une question à propos de KeyEventArgsKeyCode et KeyData et KeyValue. KeyCode et Keydata sont de type clés, mais je ne sais pas quelle est la différence entre eux. Pour KeyValue, je ne sais pas ce que c'est - il a un type int, renvoie-t-il la valeur char de la touche enfoncée?KeyEventArgs.KeyData, KeyEventArgs.KeyCode et KeyEventArgs.KeyValue

Je n'ai pas beaucoup d'expérience avec les événements clés; toute explication de leur fonctionnement et de leur utilisation serait grandement appréciée.

Répondre

19

KeyCode contient des données pour la clé qui a produit l'événement KeyUp ou KeyDown. KeyData contient la combinaison de cette touche avec CTRL, SHIFT ou ALT si l'un de ceux-ci ont été pressés.

Exemple:

  • Appuyez sur (et maintenez) CTRL. KeyDown sera élevé, KeyCode sera Keys.ControlKey, KeyData sera Keys.ControlKey | Keys.Control. Tout en maintenant la touche CTRL enfoncée, appuyez sur SHIFT.
  • KeyDown sera augmenté, KeyCode sera Keys.ShiftKey et KeyData sera Keys.ShifKey | Keys.Shift | Keys.Control.

Notez que KeyData et KeyCode peut contenir toute valeur dans l'énumération Keys (tels que Keys.A, Keys.NumPad4 ou Keys.Up). Notez que lorsque l'une des touches de modification est enfoncée, elle est représentée par deux valeurs dans KeyData (une pour la clé et une pour la valeur du modificateur). Les modificateurs sont également disponibles via la propriété Modifiers.

KeyValue retournera une valeur numérique représentant la clé, essentiellement un entier représentant la valeur trouvée dans KeyCode.

+0

Les données clés ne peuvent donc être que des touches CTRL ALT ou MAJ? Et qu'en est-il de KeyValue? – Bosak

+0

Je comprends maintenant – Bosak

+0

Donc, quand j'appuie sur la touche MAJ KeyCode ne peut être que Keys.ShiftKey et ne sera jamais Keys.Shif? Oh et est des touches énumérées de 0 à MaxKeys ou est-il énuméré comme dans la table ASCI par exemple A - 65 – Bosak