如何显示只有“关闭”或“取消”按钮的错误对话框(MessageBox)?

6
我在Windows体验准则:错误消息中读到,“确定”是显示在错误对话框上的不正确的按钮。
提供一个“关闭”按钮,不要在错误信息中使用“确定”,因为这个措辞暗示问题是可以接受的。
那么,我如何显示一个带有单个“关闭/取消”按钮的简单错误对话框?
这是否可能使用标准的MessageBox类,或者必须使用自定义对话框(或库)或其他Win32消息/p-invoke“hack”?
(在MessageBoxButtons枚举中似乎没有相关内容。)
谢谢。

如果MessageBoxButtons枚举中没有任何内容,这可能是因为您实际上不需要其他任何东西。我清楚地理解了您关于[OK]按钮的观点,但这完全取决于您遇到的问题类型。您还想让用户回答什么?他不同意并想要解决此错误吗?我不这么认为。在我看来,我会简单地使用标准的MessageBox,否则您将不得不实现自己的MessageBox,这应该不太困难。 - Will Marcouiller
@WillMarcouiller 但是根据官方的Microsoft设计文档链接,我认为还需要其他东西。我相信它是针对Vista/Windows7的,但问题仍然存在,因为MessageBox(以及底层的MessageBox WinAPI)没有提供此选项:这意味着它们没有“更新到现在的时代”。(这与“你真的不需要其他任何东西”无关。) - user166390
1个回答

7
您想要全新升级的“任务对话框(TaskDialog)”。
可以在此处下载,并且可以在此处查看使用说明
TaskDialog允许您更详细地指定按钮和图标���并且是.NET中微软自己的解决方案。
--更新以回答@pst的评论
如果您需要支持Winows XP或早期版本,则可以在codeproject上找到一个非常稳定可靠的库,当您在早期版本的Windows上使用时,它会包装和模拟微软的TaskDialog类,并在您使用Vista或更高版本时使用微软自己的版本。
我大约两年前依赖于这个codeproject库,那时它很稳定,所以不应该存在任何可靠性问题。

不错的发现。不过,如果在Windows XP上运行会发生什么呢?(这让人觉得它使用了仅适用于Vista/Windows7的API。) - user166390
然后它会自动被取消 :) - Hans Passant
感谢您的输入(和更新)。我甚至没有意识到Vista/7引入了新的TaskDialog API。您是否知道在WinForms应用程序/主机中使用这些WPF对话框时存在问题(或性能问题)? - user166390
1
我完全没有遇到任何问题。TaskDialog 类非常棒,允许你(例如)使用自定义图标、自定义按钮或者更有趣的东西,如单选按钮。所有这些都很顺畅地协同工作。我唯一注意到的问题是,如果你选择了默认图标之一,它会假定你想要某种其他行为 - 我认为是默认的声音 - (因此选择错误图标可能会播放 Windows 默认的错误声音)- 但你可以通过提供自己的自定义图标来解决这个问题(可能看起来相同)。 - perfectionist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接