控制键的ListView KeyUp错误

时间:2013-10-11 17:04:01

标签: c# listview visual-studio-2012 keyup

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>出现但控制键出现的事实。 在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无效。

欢迎任何输入。

1 个答案:

答案 0 :(得分:4)

此处没有错误,您只需按下并释放Ctrl键即可。调试器不是很好地将Keys枚举转换为字符串。它被具有[Flags]属性的枚举所混淆,因此它尝试将值中的各个位映射到Key。

所以KeyDown =(Keys.Control | Keys.ControlKey)= 0x20011。哪个调试器乱码为
0x20000 =控制
0x00010 = ShiftKey
0x00001 = LButton。

Keyup =(Keys.ControlKey)= 0x00011。哪个调试器乱转到 0x00010 = ShiftKey
0x00001 = LButton。

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