替换是/否/取消MessageBox(C#)

时间:2009-10-09 20:15:19

标签: c# winforms messagebox

我正在寻找合适的标准窗口替换YES / NO或YES / NO / CANCEL MessageBox。

我经常看到这些标准对话框被滥用的方式如下:“以纯文本格式保存答案是,或者以html格式保存答案否”。显然,文本应显示为“另存为:”按钮应标记为“文本”和“HTML”。这不是一个肯定/没有问题的问题,虽然它可以用这种方式表达,但阅读和理解并不容易。

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

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

我看了,一直都找不到。

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

4 个答案:

答案 0 :(得分:6)

在CodeProject上查看Dissecting the MessageBox。该项目有点过时,但它正是您正在寻找的,它不应该花费太多时间来更新它。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

您需要的是一个FlowLayout,用于自动对齐您创建的任何按钮的按钮。然后我们的API就像(params Tuple< string,DialogResult> []按钮)

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

答案 3 :(得分:2)

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

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

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

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

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

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