在 VS Express 12 中重现的步骤:
- 创建一个新的 Windows 窗体应用程序项目
- 添加按钮
- 将表单 KeyPreview 设置为 true
- 向表单添加 keyDown 事件
- 只要表单上存在按钮,该事件就不会触发
我有一个项目,我想同时捕获 keydown 和 keyup 事件,但是,我似乎只能让 keyup 事件工作。
我有一个带有单个面板、按钮和标签的表单。在表单中,keyPreview 属性设置为 true,并链接到 KeyDown 和 KeyUp 事件。但是,当我运行程序时,只会触发 KeyUp 事件。
我尝试通过添加手动添加事件处理程序
this.KeyPreview = true;
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
但它仍然不起作用。
有什么建议么?
KeyUp 事件:
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
TriggerKey(e.KeyCode, false);
}
private void TriggerKey(Keys e, Boolean pKeyDown)
{
switch (e)
{
case Keys.Left:
mLeft = pKeyDown;
break;
case Keys.Right:
mRight = pKeyDown;
break;
case Keys.Down:
mDown = pKeyDown;
break;
case Keys.Up:
mUp = pKeyDown;
break;
}
}
我的 Form1_KeyDown 事件如下所示:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
TriggerKey(e.KeyCode, true);
}
Edit2:我尝试从表单中删除按钮,然后两个事件都正确触发。如果我重新添加它,keyDown 事件将再次停止工作。为什么设置 keypreview 属性时按钮会干扰?