列挙子 | 10進 | 16進 | 内容 |
---|---|---|---|
D0 | 48 | 0 キー | |
D1 | 49 | 1 キー | |
NumPad0 | 96 | 0 キー (テンキー) | |
NumPad1 | 97 | 1 キー (テンキー) | |
列挙子 | 10進 | 16進 | 内容 |
---|---|---|---|
ShiftKey | 16 | 0x00000010 | Shift キー |
ControlKey | 17 | 0x00000011 | CTRL キー |
Menu | 18 | 0x00000012 | Alt キー |
列挙子 | 10進 | 16進 | 内容 |
---|---|---|---|
Shift | 65536 | 0x00010000 | Shift 修飾子キー |
Control | 131072 | 0x00020000 | Ctrl 修飾子キー |
Alt | 262144 | 0x00040000 | Alt 修飾子キー |
ShiftKey、ControlKey、Menuなどは単独で押された場合を想定したもので、修飾キーとしてはShiftなどを、Keys.Control | Keys.A
のように他のキーと組み合わせて用います。
異なる列挙子に、同一の値が割り当てられていることがあります。
// // 概要: // CAPS LOCK キー Capital = 20, // // 概要: // CAPS LOCK キー CapsLock = 20,
// // 概要: // IME かなモード キー。 KanaMode = 21, // // 概要: // IME ハングル モード キー (互換性を保つために保持されています。HangulMode を使用します) HanguelMode = 21, // // 概要: // IME ハングル モード キー。 HangulMode = 21,
Keys列挙型にはFlagsAttributeが付けられていますが、各キーの値はビットごとに割り当てられていないため、HasFlag()では正しく判定できません。
Keys left = Keys.Left; // 37 (2進では 100101) Keys right = Keys.Right; // 39 (2進では 100111) bool r1 = left.HasFlag(Keys.Left); // true bool r2 = right.HasFlag(Keys.Right); // true bool r3 = left.HasFlag(Keys.Right); // false bool r4 = right.HasFlag(Keys.Left); // true
よって修飾キーの状態を無視してキーの押下を判定したいならば、Keys.KeyCodeなどでキーコード部などを抽出したうえで等値演算子で判定します。
Keys keyCode = keyData & Keys.KeyCode; // キーコード部 Keys Modifiers = keyData & Keys.Modifiers; // 修飾キー