Chr*_*isF 112
如果表单上有一个关闭表单的按钮,您可以在表单上设置一个属性来为您执行此操作.
将CancelButton
窗体的属性设置为该按钮.
获取或设置用户按下Esc键时单击的按钮控件.
如果你没有取消按钮,那么你需要添加一个KeyDown
处理程序并检查Esc键:
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
您还必须将该KeyPreview
属性设置为true.
获取或设置一个值,该值指示在将事件传递给具有焦点的控件之前表单是否将接收键事件.
但是,正如Gargo在他的回答中指出的那样,这意味着按下Esc以中止对话框中控件的编辑也会产生关闭对话框的效果.为避免重写ProcessDialogKey
方法,如下所示:
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
Run Code Online (Sandbox Code Playgroud)
小智 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);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Button cancelBTN = new Button();
cancelBTN.Size = new Size(0, 0);
cancelBTN.TabStop = false;
this.Controls.Add(cancelBTN);
this.CancelButton = cancelBTN;
Run Code Online (Sandbox Code Playgroud)