代码之家  ›  专栏  ›  技术社区  ›  RobertTheGrey

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

  •  19
  • RobertTheGrey  · 技术社区  · 16 年前

    现在使用软件时,ESC键通常会关闭对话框,而不会保留我所做的任何更改。我特别喜欢这一点,因为即使对话框上可能有一个取消按钮,我也不一定要用鼠标或制表符来点击取消按钮。这是一种对软件说“哎呀,我不是故意这么做的!”的干净的方式。事实上,我发现我对没有实现这一功能的软件感到恼火,我不敢相信它在Winforms的保护下还没有实现——对我来说似乎很直观。。。

    我已经研究过挂接表单按键事件,或者尝试模拟“取消”对话框结果等。似乎有很多方法可以实现这一点。。。

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

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

    6 回复  |  直到 15 年前
        1
  •  30
  •   RichieHindle    16 年前

    设定 CancelButton 属性以引用“取消”按钮。

        2
  •  11
  •   Adam Butler    13 年前

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
      if (keyData == Keys.Escape)
      {
        this.Close();
        return true;
      }
      return base.ProcessCmdKey(ref msg, keyData);
    }
    
        3
  •  6
  •   ChrisF    16 年前

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

    this.CancelButton = this.cancelButton;
    

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

        4
  •  2
  •   Cody Gray    14 年前

    button b = new button();
    b.click = button_click;
    this.cancelbutton = b;
    
    
    protected void button_click(object sender,eventargs e)
    {
        this.close();
    }
    
        5
  •  1
  •   Murph    16 年前

    在某种程度上,它取决于您的开发环境-在.NET中,它内置了一个“Cancel Button”属性(就像在vb.old中一样),“forms有一个“Cancel Button”属性”如果设置了该属性,则每当用户按下“ESC”键时,按钮都会被“单击”

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

    从内存来看,默认情况下,标准消息和对话框将遵循上述逻辑-当然,您可以为消息框指定默认按钮,在该按钮中,您不希望在用户未明确声明这是他们想要做的事情的情况下发生事情。

        6
  •  0
  •   Prakash    7 年前
        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”是要关闭的表单的名称。此代码显示一个带有“是”或“否”按钮的消息框。如果选择“是”,则表示该操作将关闭表单。如果选择“否”,则表示该操作将取消。形式保持不变