如何让ESC键关闭Winforms中的对话框?

Rob*_*rey 20 binding modal-dialog winforms

这些天使用软件时,ESC键通常会关闭对话框,而不会持续进行任何更改.我喜欢这一点,特别是因为即使对话框上可能有一个取消按钮,我也不一定想要将鼠标或制表符移到取消按钮上.这是一个很好的干净方式,说"哎呀,并不打算这样做!" 到软件.事实上,我发现我对没有实现此功能的软件感到恼火,我无法相信它还没有在Winforms的引擎下完成 - 对我来说似乎很直观......

我已经看过挂钩表格KeyPress事件,或试图模拟"取消"DialogResult等.似乎有很多方法来解决这个问题......

所以问题是:在没有保存任何更改的情况下,最简单的方法是绑定ESC键以关闭对话框?

非常感谢那些有经验的人的帮助!

Ric*_*dle 28

设置CancelButton表单的属性以引用"取消"按钮.

  • 输入键还有一个相应的"AcceptButton".这种答案方法的优点是,除了按键之外还有更多的钩入和退出 - 使用此方法还将在按钮上呈现正确的视觉提示(例如,AcceptButton获得更粗的边框). (7认同)
  • 不要忘记还设置取消和确定按钮的DialogResult属性. (5认同)

Ada*_*ler 11

要在没有取消按钮时执行此操作,可以覆盖processcmdkey:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  if (keyData == Keys.Escape)
  {
    this.Close();
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以在行`this.Close();`之前插入一个`DialogResult = DialogResult.Cancel;`. (3认同)

Chr*_*isF 6

您还可以将表单的CancelButton属性设置为取消按钮:

this.CancelButton = this.cancelButton;
Run Code Online (Sandbox Code Playgroud)

在Visual Studio中,您可以通过表单的属性进行设置,并将代码添加到Form.Designer.cs文件中