21

这些天在使用软件时,ESC 键通常会关闭一个对话框,而不会保留我所做的任何更改。我特别喜欢这样,因为即使对话框上可能有一个取消按钮,我也不一定想将鼠标或选项卡移到取消按钮上。这是一种非常简洁的表达方式:“糟糕,不是故意的!” 到软件。事实上,我发现我对没有实现此功能的软件感到恼火,我不敢相信它还没有在 Winforms 的引擎盖下完成 - 对我来说似乎很直观......

我已经查看了连接到 Form KeyPress 事件,或尝试模拟“取消”DialogResult 等。似乎有很多方法可以解决这个问题......

所以问题是:绑定 ESC 键以关闭对话框而不保存任何更改的最简洁方法是什么?

非常感谢有这方面经验的人提供的任何帮助!

4

6 回答 6

30

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

于 2009-05-15T13:42:56.947 回答
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);
}
于 2011-12-09T03:15:11.937 回答
6

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

this.CancelButton = this.cancelButton;

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

于 2009-05-15T13:43:28.427 回答
2

你可以这样做:

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


protected void button_click(object sender,eventargs e)
{
    this.close();
}
于 2011-04-30T07:45:34.617 回答
1

在某种程度上,它取决于您的开发环境 - 在 .NET 中内置(就像在 vb.old 中一样),表单具有“取消按钮”属性“如果设置了此属性,则每当用户按下‘ESC’键。”

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

从内存中,标准消息和对话框将默认遵循上述逻辑-当然,可以为消息框指定默认按钮.

于 2009-05-15T13:49:36.697 回答
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

试试这个家伙。这是为了在关闭表单之前显示一个消息框以确认是或否。您可以将此代码添加到表单中名为 Keydown 的表单事件中。这里的“dashboard”是我们要关闭的表单的名称。此代码向您显示一个带有“是”或“否”按钮的消息框。如果您选择是意味着它将关闭您的表单。如果您选择否意味着操作将取消。形式保持不变

于 2017-07-11T11:24:11.443 回答