【问题标题】:Replacement for yes/no/cancel MessageBox (C#)替换是/否/取消消息框 (C#)
【发布时间】:2025-11-29 09:50:01
【问题描述】:

我正在寻找标准 Windows YES/NO 或 YES/NO/CANCEL MessageBox 的合适替代品。

我经常看到这些标准对话框被误用,例如:“保存为纯文本回答 YES,或保存为 html 回答 NO”。显然,文本应为“另存为:”按钮应标记为“文本”和“HTML”。这不是一个是/否的问题,虽然可以这样表述,但不容易阅读和理解。

Microsoft 无法更改按钮上的文本。没有快速/简单的方法可以从头开始构建替代品......正如使用上述尴尬风格的应用程序数量所证明的那样。

是否有任何免费的 C# 替换对话框或 MessageBox 至少可以让您:
- 指定按钮的数量
- 指定显示在每个按钮上的文本
- 指定默认按钮

我已经找过,但一直找不到。

(我会自己构建一个,但我对全功能控件应具有的所有行为不够熟悉,因为我只需要/使用/知道一小部分。我不使用的两个示例:主题和国际化。我需要我的同事也想使用的东西。)

【问题讨论】:

  • 当然正确的方法是问正确的问题:“您要将文档保存为纯文本吗?”
  • 但是如果您回答“否”,是否意味着它是加密保存的?不,需要更多的文字才能清楚地解释为是/否问题。

标签: c# winforms messagebox


【解决方案1】:

在 CodeProject 上查看Dissecting the MessageBox。该项目有点过时,但它几乎正是您正在寻找的内容,更新它应该不需要太多时间。

【讨论】:

  • 这确实看起来不错。它包括我的同事可能需要或喜欢的几个“额外”。而且由于它是源代码,它甚至可以被定制/扩展。谢谢。
【解决方案2】:

根据您的目标平台,task dialog 可能是执行此操作的好方法。 Windows API Code Pack 中有一个用于任务对话框的 .NET 包装器。但是,这些仅在 Windows Vista 及更高版本中提供,在 XP 或 2003 中不提供。

【讨论】:

  • 谢谢,但我们现在肯定需要支持 XP。但响应可能对其他人有所帮助!
【解决方案3】:

坦率地说,自己创建这样的 Messagebox 并不难,我们正在开发的当前应用程序中有这样的东西。

您需要的是用于自动对齐您创建的任何按钮的按钮的 FlowLayout。然后我们的 API 有类似 (params Tuple[] 按钮)

Tuple 是一个包含两个值的辅助类。该字符串是按钮的文本,Dialogresult 是我们的消息框在单击带有所述文本的按钮时返回的结果。

【讨论】:

    【解决方案4】:

    我同意弗兰克的观点。创建自己的通用表单来为您处理这个问题并不难。在不进入代码的情况下,表单应该执行以下操作

    1) 有一个属性来设置你想向用户显示的消息。

    2) 有一个添加按钮的方法,有2个参数,一个用于按钮文本,一个用于对话框结果

    3) 显示表单时,它应该处于模态对话框模式,以便应用程序的其余部分处于非活动状态,直到单击其中一个选项。

    因此,要创建另存为/不保存/取消,您将在第 2 步中添加 3 个按钮,所有按钮都带有相应的按钮文本和对话框结果。

    使用 Flow 布局,无论消息大小或按钮数量如何,您都应该能够使其正确显示。

    【讨论】: