В чем разница между свойствами KeyCode и KeyData в объектах аргументов ключевых событий .NET WinForms?

Каждый из двух классов аргументов аргументов KeyEventArgs и PreviewKeyDownEventArgs имеет два свойства: KeyCode и KeyData, которые являются обеими типами перечислений.

В чем разница между этими двумя свойствами? Знают ли значения в них друг от друга? Если да, то когда и почему?

Ответ 1

KeyCode - это перечисление, представляющее все возможные клавиши на клавиатуре. KeyData - это KeyCode в сочетании с модификаторами (Ctrl, Alt и/или Shift).

Используйте KeyCode, когда вам не нужны модификаторы, KeyData, когда вы это делаете.

Ответ 2

Разница, которую я наблюдал, заключается в том, что значение в KeyCode содержит только значение перечисления Keys для ключа, вызвавшего текущий запуск события. KeyData, с другой стороны, будет содержать логическое ИЛИ значения в KeyCode с любыми клавишами-модификаторами (CTRL, SHIFT, ALT и т.д.), которые сохраняются в то время.