What is the difference between the KeyCode and KeyData properties on the .NET WinForms key event argument objects?
The two key event argument classes KeyEventArgs
and PreviewKeyDownEventArgs
each have two properties, KeyCode
and KeyData
, which are both of the enumeration type Keys.
What is the difference between these two properties? Do the values in them ever differ from each other? If so, when and why?
KeyCode
is an enumeration that represents all the possible keys on the keyboard. KeyData
is the KeyCode
combined with the modifiers (Ctrl, Alt and/or Shift).
Use KeyCode
when you don't care about the modifiers, KeyData
when you do.
The difference that I have observed is that the value in KeyCode
only holds a Keys
enumeration value for the key that triggered the current firing of the event. KeyData
, on the other hand, will contain a logical OR of the value in KeyCode
with any modifier keys (CTRL, SHIFT, ALT, etc.) that are held at the time.