当我的C# WinForms程序中有一些控件,如树形视图、按钮和其他东西,并且它们具有焦点并且可能具有相同的键盘快捷键时,该如何关闭程序?
例如,在我的树形视图中,如果我按下ALT + ESC键,节点将被删除。但是我希望能够通过按ESC键来调用'this.Close()'方法,而不管任何控件是否具有焦点。
谢谢。
当我的C# WinForms程序中有一些控件,如树形视图、按钮和其他东西,并且它们具有焦点并且可能具有相同的键盘快捷键时,该如何关闭程序?
例如,在我的树形视图中,如果我按下ALT + ESC键,节点将被删除。但是我希望能够通过按ESC键来调用'this.Close()'方法,而不管任何控件是否具有焦点。
谢谢。
将您的表单的KeyPreview
属性设置为true。这样可以在控件具有焦点时,在表单处理程序中处理键盘消息,甚至在控件处理程序之前。
Form
上覆盖来尝试这个。protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Escape)
{
this.Close();
return true;
}
else
return base.ProcessDialogKey(keyData);
}
KeyPreview
属性设置为 true
。这样可以使表单在按键传递给上面的控件之前捕获按键,从而使您能够拦截它们并传递它们(如果您想要的话),或者执行其他操作,例如使用您的按键组合关闭表单。这已经内置在Windows中了。Alt-F4将关闭前台应用程序。您不需要特别处理此操作。如果您想仅关闭一个窗口而不是整个应用程序,例如在MDI样式界面中,则Ctrl-F4就可以解决问题。
将窗体的KeyPreview
属性设置为true(它会在控件之前将键盘事件传递到窗体),并在KeyXXX事件上编写代码,检查ESC键并调用this.close()