C# 控件键的ListView键向上错误

C# 控件键的ListView键向上错误,c#,listview,visual-studio-2012,keyup,C#,Listview,Visual Studio 2012,Keyup,ListView.KeyDown事件显示以下内容: e KeyData = LButton | ShiftKey | Control base {KeyData = LButton | ShiftKey | Control} Alt false bool Control true bool Handled false bool KeyCode LButton | ShiftKey Ke

ListView.KeyDown
事件显示以下内容:

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
-       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
我不喜欢显示
,但显示控制键。 在ListView.KeyUp
上,事件显示以下内容:

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
-       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,但没有效果


欢迎任何输入。

这里没有错误,只需按下并释放Ctrl键即可。调试器并不擅长将键枚举转换为字符串。它被具有[Flags]属性的枚举弄糊涂了,因此它试图将值中的各个位映射到一个键

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

和Keyup=(Keys.ControlKey)=0x00011。调试器将其损坏为
0x00010=移位键
0x00001=LButton


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

这里没有错误,您只需按下并释放Ctrl键。调试器并不擅长将键枚举转换为字符串。它被具有[Flags]属性的枚举弄糊涂了,因此它试图将值中的各个位映射到一个键

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

和Keyup=(Keys.ControlKey)=0x00011。调试器将其损坏为
0x00010=移位键
0x00001=LButton


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

我明白您的意思。那么,我应该如何测试传入的KeyEventArgs以正确地执行它呢?如果您想检测控制键被按下或释放,那么只需使用
If(e.KeyChar==Keys.ControlKey)
这是不寻常的。感谢Hans的教育。真的很感激。我明白你的意思。那么,我应该如何测试传入的KeyEventArgs以正确地执行它呢?如果您想检测控制键被按下或释放,那么只需使用
If(e.KeyChar==Keys.ControlKey)
这是不寻常的。感谢Hans的教育。非常感谢。