带有“验证”和“取消”按钮的消息框

5

如何创建一个有两个按钮(验证和取消)的消息框?

1个回答

8

很不幸,标准的Win32 MessageBox函数不支持自定义标签的按钮。由于VB.NET MsgBox 函数只是该本地函数的一个薄包装器,因此也不支持它们。预定义的值就是你所得到的,这意味着你所能做的最好的事情就是像“确定”和“取消”这样的内容,带有说明“确定”表示“进行验证”。

值得注意的是,多年来,这一做法一直是Windows风格指南所推荐的做法。实际上,看起来它仍然是如此。具体而言,请注意以下一般规则的例外情况:

使用正面的提交按钮作为对主要指令的特定响应,而不是通用标签,例如OK或Yes/No。用户应该能够通过阅读按钮文本来理解选项。
例外情况: - 对于没有设置的对话框(例如信息对话框),请使用Close。永远不要在具有设置的对话框中使用Close。 - 当“特定”响应仍然是通用的时候(例如Save、Select或Choose),请使用OK。 - 更改特定设置或一组设置时,请使用OK。 - 对于没有主要指令的传统对话框,可以使用通用标签,例如OK。通常这样的对话框未设计为执行特定任务,因此无法提供更具体的响应。 - 某些任务需要用户进行更多思考和仔细阅读,以做出明智的决策。这通常适用于确认操作。在这种情况下,您可以故意使用通用的提交按钮标签,以强制用户阅读主要指令并防止草率决策。
Windows Vista引入了一个新的API,旨在取代老化和难以配置的MessageBox,它被称为TaskDialog。如果你正在运行Windows Vista或7,你无疑已经在Windows shell中看到过这个对话框的使用。实际上,它允许您为每个按钮指定自定义名称,并提供一系列其他的自定义选项。但是这种控件并非免费。TaskDialog函数有两个问题:
  1. .NET Framework本身并不包含它的封装。您将需要编写自己的简单封装器或下载Windows API Code Pack,其中包含这样的封装器。但这会给您的代码添加额外的依赖性-您需要决定是否值得。

  2. 由于该API仅在Vista中引入,这意味着仅在运行Vista或更新版本时才能使用。如果您仍然需要针对Windows XP(或2000)进行定位,则很遗憾。显示TaskDialog的代码将失败,并且您需要包括一个备用程序来显示标准MessageBox。当然,在这些传统操作系统上,这使您无法自定义按钮标签。再次强调,只有您可以决定这是否对您的应用程序和/或部署方案构成重大问题。

另一个选项,被许多代VB程序员使用的方法,是创建自己的类似MessageBox的小窗体。布局简单的窗体并不难,可以设置图标/图片,一些标题文本和所需的所有按钮。由于您创建了整个窗体,因此可以根据需要从代码自定义它。
如果你在Vista之前的Windows版本中绝对需要这个功能,那么创建自己的消息框表单是你唯一的选择。否则,我强烈建议你利用新的TaskDialog API。这样做可以在你的应用程序中促进与用户计算机上安装的其他应用程序以及Windows本身的一致性。很难确保你自己的自定义消息框表单得到正确的小细节,比如根据文本长度和用户屏幕大小自动换行标签文本。并根据您的对话框是否包含“取消”按钮,在标题栏中显示/隐藏“X”关闭按钮。标准的Windows MessageBox/TaskDialog为您免费完成了许多其他事情,而无需您抬起手指头。这只是一个重新阐述的一般原则:当你不绝对必须这样做时,永远不要重新发明轮子。
一个好的折中方案可能是使用类似于this TaskDialog包装器/模拟器的东西。在可用本地TaskDialog API的Vista及更高版本中,它自动调用该函数。否则,它使用标准表单并尝试模拟本地TaskDialog API的行为。我为自己编写了一个类似的自定义类,但我从未想过在线发布它。

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