.NET:如何让Escape关闭MessageBox.Show()?

时间:2009-02-12 18:30:45

标签: .net winforms dialog modal-dialog

假设代码:

MessageBox.Show(this, 
       "Would you like the differential girdle spring on the up-end of the grammeters?", 
       "Smi-Boloid Stater Slots", 
       MessageBoxButtons.YesNo, 
       MessageBoxIcon.Warning);

alt text

如果用户按转义,我希望它关闭消息框,Show()方法可以返回DialogResult.None

相关问题:如何启用MessageBox.Show右上角的“X”让用户中止?


有点像Windows资源管理器确认对话框如何让您按下转义以中止。

有点像Internet Explorer确认对话框如何让您按rpm以中止。

有点像Outlook确认对话框如何让你按下转义来中止。

有点像宇宙历史中的每个对话框如何让用户按下转义,或者单击X,以便说:

  

“我不知道你是什么   问我,请不要打破我的   计算机“。


From the Vista UX Guidelines

  

仅使用“是”和“否”按钮回答是或否问题。   主要指示应该是自然的   表达为是或否的问题。   是或否使用确定和取消   的问题。

6 个答案:

答案 0 :(得分:12)

您必须使用枚举值“MessageBoxButtons.YesNoCancel”启用“取消”选项

这将返回DialogResult.Cancel

enter image description here

答案 1 :(得分:3)

我不相信这是可能的,虽然典型的等价物是使用取消指定其中一个 MessageBoxButtons 标志(在您的情况下特别是YesNoCancel)

使用此功能重新创建自己的MessageBox功能应该相当简单,如果你真的需要它,尽管取消可以完成这项工作。

答案 2 :(得分:1)

我怀疑如果你包含MessageBoxButtons.YesNoCancel,默认情况下Escape连接到cancel,它将返回一个取消的MessageBoxResult。

答案 3 :(得分:1)

除了其他答案之外,允许用户关闭带有转义的对话框可能是不好的做法,除非它显示“取消”按钮,因为这与用户期望从Windows应用程序的默认行为不同,并且它们可能变得不确定他们刚刚通过按下转义键采取了哪些动作。

如前所述,添加“取消”按钮将自动创建所需的效果。

答案 4 :(得分:1)

我认为MessageBox(WinForms和WPF中的一个)是最佳重新定义的组件之一。它的行为非常严格,任何类型的重构都是不可能的。简而言之,滚动你自己 - 这样你可以让Escape关闭它,以及你可能需要的任何其他东西。

CodePlex上有一个名为InfoBox的项目可能对您有用。

答案 5 :(得分:1)

听起来像MessageBoxButtons.OkCancel就是你要找的东西,你只是挂断了这个问题与Ok / Cancel不匹配的事实。

理论上,您可以编写自己的MessageBox表单来执行相同的操作,并将No与Escape键关联起来,这样可以完成您想要的任务,并且需要额外的工作。

另一种选择是重新解释您的问题,例如:

MessageBox.Show(this, "The following operation will format your computer.\r\nPress Ok to continue, Cancel to abort", "Confirm Format", MessageBoxButtons.OkCancel, MessageBoxIcon.Warning);

只是一个例子,但它可能是解决您困境的最简单方法。