C# 按Esc键不是触发按键关闭事件
按Esc键不会触发C# 按Esc键不是触发按键关闭事件,c#,forms,keydown,C#,Forms,Keydown,按Esc键不会触发向下键事件。按空格键或F键触发事件,但不触发 原因可能是什么 在以下示例中,KeyPreview设置为True: private void form_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Space: btnCreate_Click(null, null); break;
向下键
事件。按空格键或F键触发事件,但不触发
原因可能是什么
在以下示例中,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;
}
}
有道理。检查此处的文档: 某些键(如TAB键、RETURN键、ESC键和
箭头键)由控件自动处理。要使这些键引发KeyDown事件,必须覆盖窗体上每个控件中的IsInputKey
方法
您可以处理PreviewKeyDown
事件并将IsInputKey
属性设置为true,而不是重写IsInputKey
方法。有关代码示例,请参见PreviewKeyDown事件
这段代码的意义是什么?为什么代码调用其他控件的事件处理程序而不是方法?在任何情况下,ESC
键都有一个非常特定的作业-取消并关闭表单。提交它是Enter
的工作。这段代码会给最终用户和表单代码本身带来很多混乱,而不是用鼠标点击关闭按钮,我们只想通过按Esc键来关闭表单,这就是代码的要点。被调用的事件处理程序方法正在执行案例所需的操作,因此我直接调用了它们,但我应该将它们的内容定义为我知道的一个单独的方法。如果正确配置表单,您已经可以这样做了,因为Esc
是Cancel的击键,Enter
的方式与OK
Check的击键方式相同,默认情况下,它将使用Enter作为Accept按钮。TAB、RETURN、箭头键在启动事件时没有以编程方式将其定义为inputKey。根据文档,这似乎很奇怪。它解决了Escape按钮的问题吗?我尝试了IsInputKey和PreviewKeyDown两种方法,但对Esc不起作用,不幸的是,感谢您的推荐!我在另一篇文章中找到了ProcessCmdKey方法,但也没用。我想我会用“Q”来表示退出
protected override bool IsInputKey(Keys keyData)
{
if (keyData == Keys.Escape)
{
return true;
}
else
{
return base.IsInputKey(keyData);
}
}
button1.PreviewKeyDown +=new PreviewKeyDownEventHandler(button1_PreviewKeyDown);
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Escape:
e.IsInputKey = true;
break;
}
}