如何按下退出键时closures窗体?

我有一个小窗体,当我按下Windows窗体应用程序中的一个button时出现。

我希望能够通过按下退出键closures窗体。 我怎么能这样做? 我不确定要使用的事件(form_closing?)?

您可以在窗体上设置一个属性,以便在窗体上有一个closures表单的button。

CancelButton属性设置为该button。

获取或设置用户按下Esc键时单击的button控件。

如果你没有取消button,那么你需要添加一个KeyDown处理程序,然后检查Esc键:

 private void Form_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { this.Close(); } } 

您还必须将KeyPreview属性设置为true。

获取或设置一个值,该值指示在将事件传递给具有焦点的控件之前,表单是否会接收关键事件。

然而,正如Gargo在他的回答中所指出的那样,这意味着按下Esc来放弃对话框中的控件的编辑也将具有closures对话的效果。 为了避免重写ProcessDialogKey方法,如下所示:

 protected override bool ProcessDialogKey(Keys keyData) { if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape) { this.Close(); return true; } return base.ProcessDialogKey(keyData); } 

我发现的最好的方法是重写“ProcessDialogKey”函数。 这样,取消打开的控件仍然是可能的,因为只有在没有其他控件使用按下的键时才会调用该function。

这与设置CancelButton时的行为相同。 使用KeyDown事件始终会触发,因此即使取消编辑打开的编辑器,表单也会closures。

 protected override bool ProcessDialogKey(Keys keyData) { if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape) { this.Close(); return true; } return base.ProcessDialogKey(keyData); } 

如果您的表单上有一个取消button,您可以将Form.CancelButton属性设置为该button,然后按下转义将有效地“单击button”。

如果您没有这样的button,请查看Form.KeyPreview属性。

 Button cancelBTN = new Button(); cancelBTN.Size = new Size(0, 0); cancelBTN.TabStop = false; this.Controls.Add(cancelBTN); this.CancelButton = cancelBTN;