【问题标题】:ListView KeyUp Error for the Control Key控制键的 ListView KeyUp 错误
【发布时间】:2013-10-11 17:04:00
【问题描述】:

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 无济于事。

欢迎任何意见。

【问题讨论】:

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


    【解决方案1】:

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

    所以 KeyDown = (Keys.Control | Keys.ControlKey) = 0x20011。调试器破坏到
    0x20000 = Control
    0x00010 = Shift键
    0x00001 = LButton。

    并且 Keyup = (Keys.ControlKey) = 0x00011。调试器会破坏哪些
    0x00010 = Shift键
    0x00001 = LButton。

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

    【讨论】:

    • 我明白你的意思。那么我应该如何测试传入的 KeyEventArgs 以正确地做到这一点 Hans。
    • 测试什么?如果你想检测 Control 键被按下或释放,那么只需使用 if (e.KeyChar == Keys.ControlKey) 这很不寻常。
    • 感谢汉斯的教育。真的很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    相关资源
    最近更新 更多