首页 文章

C#Windows窗体:UserWork控件上的FrameWork 2.0多键检测

提问于
浏览
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那样不同地处理这个事件吗?

*注意:上面的代码工作正常,如果它是一个普通的Form.I也尝试切换托管userControl的表单的KeyPreview值,似乎我没有工作 .

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

2 回答

  • 0

    您只是从调试器中获取混乱的信息 . Keys enum具有[Flags]属性,但由于您首先按下Ctrl键,因此它不会达到't actually use bits to identify keys consistently. LButton|ShiftKey == 0x01|0x10 == 0x11 = Keys.ControlKey. And that' . 当您按住Ctrl键的同时按E键时,它是您想要的下一个按键 . 但这不会发生,因为调试器破坏了这一点 .

    最好的方法是:

    if (e.KeyData == (Keys.E | Keys.Control)) {
        // etc...
    }
    
  • 1

    它应该是:

    if (((e.KeyCode & Keys.E) == Keys.E) && e.Control)
    

相关问题