16

假设代码:

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 资源管理器确认对话框如何让您按转义键中止。

有点像 Internet Explorer 确认对话框如何让您按转义键中止。

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

有点像宇宙历史上的每一个对话框都让用户按下退出键,或者单击 X,以便说:

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


来自 Vista UX 指南

仅使用是和否按钮来回答是或否问题。主要指令应该自然地表达为是或否的问题。对于是或否问题,切勿使用 OK 和 Cancel。

4

6 回答 6

12

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

这将返回 DialogResult.Cancel

在此处输入图像描述

于 2009-02-12T18:35:08.800 回答
4

我不相信这是可能的,尽管典型的等价物是使用Cancel指定MessageBoxButtons标志之一(在您的情况下特别是 YesNoCancel)。

如果你真的想要的话,用这个特性重新创建你自己的 MessageBox 函数应该是相当简单的,尽管Cancel确实可以完成这项工作。

于 2009-02-12T18:37:33.393 回答
2

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

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

于 2009-02-12T18:36:58.980 回答
1

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

于 2009-02-12T18:35:51.603 回答
1

我认为MessageBox(WinForms 和 WPF 中的那个)是最好重新定义的组件之一。它的行为是如此僵化,以至于几乎不可能进行任何形式的重构。简而言之,自己动手——这样你就可以让 Escape 关闭它,以及你可能需要的任何其他东西。

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

于 2009-02-12T18:38:24.657 回答
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);

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

于 2009-02-12T19:04:38.853 回答