如何创建一个有两个按钮(验证和取消)的消息框?
很不幸,标准的Win32 MessageBox
函数不支持自定义标签的按钮。由于VB.NET MsgBox
函数只是该本地函数的一个薄包装器,因此也不支持它们。预定义的值就是你所得到的,这意味着你所能做的最好的事情就是像“确定”和“取消”这样的内容,带有说明“确定”表示“进行验证”。
值得注意的是,多年来,这一做法一直是Windows风格指南所推荐的做法。实际上,看起来它仍然是如此。具体而言,请注意以下一般规则的例外情况:
使用正面的提交按钮作为对主要指令的特定响应,而不是通用标签,例如OK或Yes/No。用户应该能够通过阅读按钮文本来理解选项。MessageBox
,它被称为TaskDialog
。如果你正在运行Windows Vista或7,你无疑已经在Windows shell中看到过这个对话框的使用。实际上,它允许您为每个按钮指定自定义名称,并提供一系列其他的自定义选项。但是这种控件并非免费。TaskDialog
函数有两个问题:
.NET Framework本身并不包含它的封装。您将需要编写自己的简单封装器或下载Windows API Code Pack,其中包含这样的封装器。但这会给您的代码添加额外的依赖性-您需要决定是否值得。
由于该API仅在Vista中引入,这意味着仅在运行Vista或更新版本时才能使用。如果您仍然需要针对Windows XP(或2000)进行定位,则很遗憾。显示TaskDialog
的代码将失败,并且您需要包括一个备用程序来显示标准MessageBox
。当然,在这些传统操作系统上,这使您无法自定义按钮标签。再次强调,只有您可以决定这是否对您的应用程序和/或部署方案构成重大问题。
MessageBox
的小窗体。布局简单的窗体并不难,可以设置图标/图片,一些标题文本和所需的所有按钮。由于您创建了整个窗体,因此可以根据需要从代码自定义它。TaskDialog
包装器/模拟器的东西。在可用本地TaskDialog
API的Vista及更高版本中,它自动调用该函数。否则,它使用标准表单并尝试模拟本地TaskDialog
API的行为。我为自己编写了一个类似的自定义类,但我从未想过在线发布它。