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

.NET:如何让Escape关闭MessageBox.Show()?,.net,winforms,dialog,modal-dialog,.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); 如果用户按Escape,我希望它关闭消息框,Show()

假设代码:

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);

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

相关问题:如何启用MessageBox.Show右上方的“X”以允许用户中止


有点像Windows资源管理器确认对话框允许您按escape键中止

有点像Internet Explorer确认对话框让您按escape中止

有点像Outlook确认对话框允许您按escape键中止

有点像宇宙历史中的每个对话框都允许用户按escape键,或单击X键,以便说:

“我根本不知道你在干什么 问我,请不要打断我的话 计算机。”


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

必须使用枚举值“MessageBoxButtons.YesNoCancel”启用“Cancel”选项

这将返回DialogResult。取消


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

关于其他答案,允许用户关闭带有Escape的对话框可能是一种不好的做法,除非它显示“cancel”按钮,因为这不同于用户期望从Windows应用程序中获得的默认行为,并且他们可能会不确定按escape键时所采取的操作


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

我认为这是不可能的,尽管典型的等效方法是使用Cancel指定一个标志(特别是在您的情况下为YesNoCancel)


如果您真的需要,使用此功能重新创建您自己的MessageBox函数应该是相当简单的,尽管真正的Cancel可以完成此任务。

我认为
MessageBox
(WinForms和WPF中的一个)是最好重新定义的组件之一。它的行为非常严格,任何形式的重构几乎都是不可能的。简言之,滚动你自己的-这样你可以有逃脱关闭它,和任何其他你可能需要的


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

听起来像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);

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

或MessageBoxButtons.OkCancelException cancel不是“您确定要…”问题的有效答案。。。“逃跑”不是“是或否”的有效答案?逃跑根本不是答案,它是“哦,天哪,我做了什么,我不知道!”@IanBoyd类似“你确定要删除这个吗?”这样的话,当然符合“哦,该死的,不”逃跑按钮按下的条件。。。但是Yes/No/Cancel在这种情况下似乎很愚蠢。Escape的意思是,“哦,该死,我不是故意这么做的,假装我没有做任何让这个东西出现的事情。”如果用户点击“No”和“Cancel”,这意味着什么?在这种情况下,No和Cancel的意思基本相同。是取消适用于“是否要在关闭HelloWorld之前保存对文档的更改?”是:请保存。否:关闭而不保存。取消:不关闭或保存,只需返回。但两者基本上做相同的事情,这就是为什么我们想要一个退出选项!!我不知道为什么微软会错过它!现在,即使“否”和“取消”意味着不同的事情,为什么我不能逃避“是”和“否”的对话呢!为了解决这个问题,我自己推出了一款..可用性vs易用性。六羟甲基三聚氰胺六甲醚