0

我想识别在 UserControl 内的 TextBox 上按下的 Ctrl+E 键,为此我使用textbox_KeyDown(object sender, KeyEventArgs e)事件并检查以下条件

    if(e.KeyCode == Keys.E && Control.ModifierKeys == Keys.Control) 
    {
        //Code
    }

由于某种原因,if 条件的第一部分即 (e.KeyCode == Keys.E) 返回 false,因为 e.keycode 将Lbutton|ShifKey作为其值。

1>为什么没有检测到'E'键按下?2>我们是否应该像 UserConrol 一样处理这个事件?

*注意:如果是普通表单,上面的代码工作正常。我还尝试切换承载 userControl 的表单的 KeyPreview 值在我看来没有任何工作。

任何人都可以帮我解决这个问题。提前致谢

4

2 回答 2

1

您只是从调试器中获得令人困惑的信息。Keys 枚举具有 [Flags] 属性,但它实际上并不使用位来一致地识别键。LButton|ShiftKey == 0x01|0x10 == 0x11 = Keys.ControlKey。这是意料之中的,因为您先按了 Ctrl 键。当您在按住 Ctrl 的同时按 E 时,这是您想要的下一个键击。但这不会发生,因为调试器中断搞砸了。

最好的方法是:

if (e.KeyData == (Keys.E | Keys.Control)) {
    // etc...
}
于 2013-06-17T15:27:05.787 回答
0

它应该是:

if (((e.KeyCode & Keys.E) == Keys.E) && e.Control)
于 2013-06-17T13:57:02.673 回答