我想识别在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 回答
您只是从调试器中获取混乱的信息 . Keys enum具有[Flags]属性,但由于您首先按下Ctrl键,因此它不会达到't actually use bits to identify keys consistently. LButton|ShiftKey == 0x01|0x10 == 0x11 = Keys.ControlKey. And that' . 当您按住Ctrl键的同时按E键时,它是您想要的下一个按键 . 但这不会发生,因为调试器破坏了这一点 .
最好的方法是:
它应该是: