我有一个小表单,当我按下Windows Forms应用程序中的按钮时会出现。
我希望能够通过按退出键关闭表单。我怎么能这样做?我不确定要使用的事件(form_closing?)?
答案 0 :(得分:108)
如果表单上有一个关闭表单的按钮,您可以在表单上设置一个属性来为您执行此操作。
将表单的CancelButton
属性设置为该按钮。
获取或设置当用户按下 Esc 键时单击的按钮控件。
如果您没有取消按钮,则需要添加KeyDown
处理程序并检查其中的Esc键:
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
您还必须将KeyPreview
属性设置为true。
获取或设置一个值,该值指示在将事件传递给具有焦点的控件之前表单是否将接收键事件。
然而,正如Gargo在他的answer中指出这意味着按 Esc 中止对话框中控件的编辑也会产生关闭对话框的效果。为了避免覆盖ProcessDialogKey
方法,如下所示:
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
答案 1 :(得分:25)
我发现的最好方法是覆盖“ProcessDialogKey”功能。这样就可以取消打开控件,因为只有在没有其他控件使用按下的键时才会调用该函数。
这与设置CancelButton时的行为相同。使用KeyDown事件始终触发,因此即使应该取消编辑打开的编辑器,表单也会关闭。
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
答案 2 :(得分:6)
如果表单上有取消按钮,可以将Form.CancelButton属性设置为该按钮,然后按下escape将有效地“单击按钮”。
如果您没有这样的按钮,请查看Form.KeyPreview属性。
答案 3 :(得分:1)
Button cancelBTN = new Button();
cancelBTN.Size = new Size(0, 0);
cancelBTN.TabStop = false;
this.Controls.Add(cancelBTN);
this.CancelButton = cancelBTN;
答案 4 :(得分:0)
将此代码粘贴到表单的“ On Key Down”属性中,并确保将“ Key Preview”属性设置为“ Yes”。
If KeyCode = vbKeyEscape Then DoCmd.Close acForm, "YOUR FORM NAME"