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

问题描述 投票:15回答:6

假设代码:

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

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

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


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

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

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

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

“我不知道你在问我什么,请不要破坏我的电脑。”


From the Vista UX Guidelines

使用“是”和“否”按钮仅回答是或否问题。主要指示应自然地表达为是或否问题。对于是或否问题,切勿使用“确定”和“取消”。

.net winforms dialog modal-dialog
6个回答
3
投票

我不相信这是可能的,虽然典型的等价物是指定一个带有取消的MessageBoxButtons标志(在你的情况下特别是YesNoCancel)。

使用此功能重新创建自己的MessageBox函数应该相当简单,如果你真的想要它,尽管真的取消了。


12
投票

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

这将返回DialogResult.Cancel

enter image description here


1
投票

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


1
投票

除了其他答案之外,允许用户使用escape关闭对话框可能是不好的做法,除非它显示“取消”按钮,因为这与用户期望从Windows应用程序的默认行为不同,并且他们可能不确定哪个动作他们只是按下退出键。

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


1
投票

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

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


1
投票

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

理论上,您可以编写自己的MessageBox表单来执行相同的操作,并将“否”与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);

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

© www.soinside.com 2019 - 2024. All rights reserved.