如何在一个控件获得焦点时用键盘关闭WinForm

5

当我的C# WinForms程序中有一些控件,如树形视图、按钮和其他东西,并且它们具有焦点并且可能具有相同的键盘快捷键时,该如何关闭程序?

例如,在我的树形视图中,如果我按下ALT + ESC键,节点将被删除。但是我希望能够通过按ESC键来调用'this.Close()'方法,而不管任何控件是否具有焦点。

谢谢。

5个回答

4

将您的表单的KeyPreview属性设置为true。这样可以在控件具有焦点时,在表单处理程序中处理键盘消息,甚至在控件处理程序之前。


2
也许您可以通过在Form上覆盖来尝试这个。
protected override bool ProcessDialogKey(Keys keyData)
{
    if (keyData == Keys.Escape)
    {
        this.Close();
        return true;
    }
    else
        return base.ProcessDialogKey(keyData);
}

1
你需要将表单的 KeyPreview 属性设置为 true。这样可以使表单在按键传递给上面的控件之前捕获按键,从而使您能够拦截它们并传递它们(如果您想要的话),或者执行其他操作,例如使用您的按键组合关闭表单。

1

这已经内置在Windows中了。Alt-F4将关闭前台应用程序。您不需要特别处理此操作。如果您想仅关闭一个窗口而不是整个应用程序,例如在MDI样式界面中,则Ctrl-F4就可以解决问题。


这是真的,但按ESC键比alt f4组合更容易,特别是当用户需要经常这样做时! - Dumbo
1
我会持相反的观点。你可以为你的应用程序制定一个“更简单”的替代方案,但是教用户标准键将帮助他们在所有使用的应用程序中受益。在已经存在标准的情况下,尽量不要发明替代方案。 - Mel

0

将窗体的KeyPreview属性设置为true(它会在控件之前将键盘事件传递到窗体),并在KeyXXX事件上编写代码,检查ESC键并调用this.close()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接