1

ListView.KeyDown<Ctrl>事件显示如下:

e   KeyData = LButton | ShiftKey | Control
    base    {KeyData = LButton | ShiftKey | Control}
        Alt false   bool
        Control true    bool
        Handled false   bool
        KeyCode LButton | ShiftKey
        KeyData LButton | ShiftKey | Control
        KeyValue    17
        Modifiers   
        Shift   false   bool
        SuppressKeyPress    false   bool

我不喜欢<ShiftKey>出现但 Control 键出现的事实。在 ListView.KeyUp<Ctrl>事件上显示以下内容:

-       e   {KeyData = LButton | ShiftKey}
+       base    {KeyData = LButton | ShiftKey}
        Alt false   bool
        Control false   bool
        Handled false   bool
        KeyCode LButton | ShiftKey
        KeyData LButton | ShiftKey
        KeyValue    17
        Modifiers   None
        Shift   false   bool
        SuppressKeyPress    false

是什么给了它很奇怪。查看网络以查看是否有此错误的任何示例,但什么也找不到。我尝试在托管表单上将 KeyPreview 设置为 true 无济于事。

欢迎任何意见。

4

1 回答 1

4

这里没有错误,您只需按下并释放 Ctrl 键。调试器只是不太擅长将 Keys 枚举转换为字符串。它对具有 [Flags] 属性的枚举感到困惑,因此它尝试将值中的各个位映射到 Key。

所以 KeyDown = (Keys.Control | Keys.ControlKey) = 0x20011。调试器将其修改为
0x20000 = Control
0x00010 = ShiftKey
0x00001 = LButton。

并且 Keyup = (Keys.ControlKey) = 0x00011。调试器将其修改为
0x00010 = ShiftKey
0x00001 = LButton。

或者换句话说,忽略调试器告诉你的内容。

于 2013-10-11T18:26:51.177 回答