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

时间:2009-05-15 13:34:54

标签: winforms binding modal-dialog

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

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

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

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

6 个答案:

答案 0 :(得分:27)

设置表单的CancelButton属性以引用“取消”按钮。

答案 1 :(得分:10)

如果没有取消按钮,可以覆盖processcmdkey:

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

答案 2 :(得分:6)

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

this.CancelButton = this.cancelButton;

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

答案 3 :(得分:2)

你可以这样做:

button b = new button();
b.click = button_click;
this.cancelbutton = b;


protected void button_click(object sender,eventargs e)
{
    this.close();
}

答案 4 :(得分:1)

在某种程度上,它取决于你的开发环境 - 在.NET中内置(就像在vb.old中一样),表单有一个“取消按钮”属性“如果设置了这个属性,按钮被'点击'每当用户按下'ESC'键时。“

“ENTER”键有一个相应的“AcceptButton”属性。

默认情况下,从内存中,标准消息和对话框将遵循上述逻辑 - 当然,可以指定消息框的默认按钮,在此消息框中您不希望发生任何事情而没有用户肯定断言这就是他们的内容想做。

答案 5 :(得分:0)

    If e.KeyCode = Keys.Escape Then
        If MsgBox("Are you sure to exit system (Y/N) ?", MsgBoxStyle.YesNo + MsgBoxStyle.Question) = MsgBoxResult.No Then Exit Sub
        dashboard.Close()

    ElseIf e.KeyCode = Keys.F5 Then
        MessageBox.Show("F5")
    End If

试试这些人。这是为了显示一个messageBox,用于在关闭Forms之前确认是或否。您可以将此代码添加到名为Keydown的表单中的表单中。这里"仪表板"是我们要关闭的表格的名称。此代码显示带有是或否按钮的消息框。如果您选择是表示它将关闭您的表单。如果您选择否则表示该操作将取消。表格保持不变