【发布时间】:2020-10-16 06:23:11
【问题描述】:
按 Esc 不会触发 KeyDown 事件。按 Spacebar 或 F 会触发该事件,但 Esc 不会。
可能是什么原因?
KeyPreview 在以下示例中设置为True:
private void form_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Space:
btnCreate_Click(null, null); break;
case Keys.F:
switchThrow(); break;
case Keys.Escape:
form_FormClosing(null, null); break;
}
}
【问题讨论】:
-
这段代码有什么意义?为什么代码调用其他控件的事件处理程序而不是方法?在任何情况下,
ESC键都有一个非常具体的工作 - 取消并关闭表单。提交它是Enter的工作。此代码可能会导致最终用户和表单代码本身的很多混淆 -
我们不希望用鼠标单击关闭按钮,而是希望能够通过按 Esc 来关闭表单,这就是代码的重点。调用的事件处理程序方法正在执行案例需要的操作,因此我直接调用它们,但我应该将它们的内容定义为我知道的单独方法。
-
如果您正确配置表单,您已经可以这样做了,因为
Esc是取消的按键,同样Enter是OK的按键 -
还有How to: Designate a Windows Forms Button as the Accept Button Using the Designer,默认情况下将使用 ENTER 作为接受按钮。