带有“validation”和“取消”button的消息框

我怎样才能有一个msgbox两个button,validation和取消?

不幸的是,标准的Win32 MessageBox函数不支持带有自定义标签的按钮。 而且,由于VB.NET MsgBox函数是本地函数的一个简单包装,它也不支持它们。 预先定义的值就是你所能得到的,这意味着你可以做的最好的就是“OK”和“Cancel”,文本解释为“OK”意味着“继续验证”。

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

使用对主指令作出特定响应的肯定提交按钮,而不是通用标签,如“确定”或“是/否”。 用户应该能够通过单独阅读按钮文本来理解选项。
例外:

  • 对于没有设置的对话框(如信息对话框),请使用关闭。 从不使用关闭有设置的对话框。
  • 当“特定”响应仍然是通用的时请使用“确定” ,例如“保存”,“选择”或“选择”。
  • 更改特定设置或一组设置时请使用“确定”。
  • 对于没有主指令的传统对话框,可以使用通用标签,如OK。 通常这样的对话框不是被设计来执行特定的任务,从而防止更具体的响应。
  • 某些任务需要更多的思考和仔细阅读,以便用户作出明智的决定。 确认通常是这种情况。 在这种情况下,您可以故意使用通用提交按钮标签来强制用户阅读主要说明并防止仓促做出决定。

Windows Vista引入了一个新的API来替代老化和无法配置的MessageBox它被称为TaskDialog 如果您运行的是Windows Vista或7,则无疑会在整个Windows Shell中看到此对话框。 它实际上允许您为每个按钮指定自定义名称,并提供其他自定义选项的数组。 但这种控制不是免费的。 TaskDialog函数有两个问题:

  1. .NET框架不包括它的包装盒。 您需要编写自己的简单包装器,或者下载包含这种包装器的Windows API代码包 。 但是这增加了对代码的额外依赖性 – 您将不得不决定是否值得。

  2. 由于API仅在Vista中引入,这意味着程序只能在Vista或更高版本上运行时使用它。 如果你仍然需要瞄准Windows XP(或2000),那么你倒霉了。 显示TaskDialog将会失败,您需要包含一个后备例程来显示标准的MessageBox 当然,在那些原有的操作系​​统上,无法自定义按钮标签的情况下,哪一种方法可以让您回到起点。 同样,只有您可以决定这是否是您的应用程序和/或部署方案的重要关注点。

VB程序员使用的另一种选择是将自己的小型MessageBox风格的表单打开。 用一个图标/图像,一些标题文本和所有你想要的按钮来放置一个简单的表单并不难。 由于您已经创建了整个表单,所以您可以根据自己的意愿自由定制代码。

如果您在Vista之前的Windows版本中绝对需要此功能,那么创建您自己的消息框表单是唯一的选择。 否则,我强烈建议您利用新的TaskDialog API。 在您的应用程序中这样做可以提高用户可能在其计算机上安装的其他应用程序的一致性,甚至可以与Windows自身保持一致。 很难确保您自己的自定义消息框表单正确地获得小小的方便,就像根据自己的长度和用户的屏幕大小自动包装标签文本一样。 显示/隐藏标题栏中的“X”关闭按钮取决于您的对话框是否包含“取消”按钮。 还有一个令人难以置信的数量的其他东西,标准的Windows MessageBox / TaskDialog为您免费提供,而不必提起一个手指。 这只是重申一般原则:当你不必绝对必须这样做时,不要重新发明轮子。

一个好的妥协可能是使用像这个TaskDialog包装器/模拟器 。 在Vista和更高版本的本地TaskDialog API可用的地方,它会自动调用该函数。 否则,它将使用标准形式并尝试模拟本机TaskDialog API的行为。 我写了一个类似的自定义类,但是我从来没有在网上发表。