0

アプリが左矢印キーと右矢印キーに応答するようにします。だから私は書いた

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

キーボードの左側にある Ctrl をクリックすると、この関数が呼び出され、keyData の値は

keyData = LButton | ShiftKey | Control

何故ですか?

ありがとうございました!

4

1 に答える 1

5

デバッガーは、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 列挙値の大部分はフラグ値ではありません。

于 2013-01-28T12:44:55.023 に答える