アプリが左矢印キーと右矢印キーに応答するようにします。だから私は書いた
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
キーボードの左側にある Ctrl をクリックすると、この関数が呼び出され、keyData の値は
keyData = LButton | ShiftKey | Control
何故ですか?
ありがとうございました!
デバッガーは、Keys 列挙型の宣言によって混乱します。次のようになります。
[Flags]
public enum Keys {
LButton = 1,
ShiftKey = 0x10,
ControlKey = 0x11,
Control = 0x20000,
// And lots more
}
[Flags] 属性をオンにすると、デバッガー ビジュアライザーは の個々のビットの値を表示しようとしますkeyData
。値が 0x11 の Control キー Keys.ControlKey を押しました。これにより、コントロール フラグがオンになり、keyData = 0x20011 になります。
したがって、デバッガーは 0x20011 をビットとして解釈し、0x20000 にします。0x00010 | 0x00001。「LButton | ShiftKey | Control」に変わります。(int)keyData
デバッガ式で使用する以外に、よりスマートにする良い方法はありません。基本的な問題は、列挙型の [Flags] 属性です。これはある程度適切ですが、Keys 列挙値の大部分はフラグ値ではありません。