.net 带有验证和取消按钮的消息框

.net 带有验证和取消按钮的消息框,.net,windows,vb.net,messagebox,.net,Windows,Vb.net,Messagebox,如何使msgbox具有两个按钮(验证和取消)?不幸的是,标准Win32不支持带有自定义标签的按钮。由于VB.NETMsgBox函数是该本机函数的薄包装,因此它也不支持它们。预定义的值就是您得到的所有值,这意味着您能做的最好的事情是“确定”和“取消”,文本解释“确定”意味着“继续验证” 值得注意的是,多年来,这是Windows样式指南认可的推荐做法。事实上,它看起来像。具体而言,请注意以下一般规则的例外情况: 使用积极提交按钮,这些按钮是对主指令的特定响应,而不是像“确定”或“是/否”这样的通用标

如何使msgbox具有两个按钮(验证和取消)?

不幸的是,标准Win32不支持带有自定义标签的按钮。由于VB.NET
MsgBox
函数是该本机函数的薄包装,因此它也不支持它们。预定义的值就是您得到的所有值,这意味着您能做的最好的事情是“确定”和“取消”,文本解释“确定”意味着“继续验证”

值得注意的是,多年来,这是Windows样式指南认可的推荐做法。事实上,它看起来像。具体而言,请注意以下一般规则的例外情况:

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

  • 对没有设置的对话框(如信息对话框)使用“关闭”。对于具有设置的对话框,切勿使用“关闭”
  • 当“特定”响应仍然是通用的时,如保存、选择或选择,请使用“确定”
  • 更改特定设置或设置集合时使用“确定”
  • 对于没有主指令的传统对话框,您可以使用“确定”等通用标签。此类对话框通常不是为执行特定任务而设计的,因此无法执行更具体的响应
  • 某些任务需要更多的思考和仔细阅读,以便用户做出明智的决策。确认书通常就是这种情况在这种情况下,您可以有目的地使用通用提交按钮标签,强制用户阅读主要说明,防止仓促决定。

Windows Vista引入了一个新的API,旨在取代老化且无法配置的
MessageBox
——它被称为。如果您运行的是WindowsVista或7,那么毫无疑问,您已经在整个Windowsshell中看到了这个对话框。事实上,它允许您为每个按钮指定自定义名称,并提供一系列其他自定义选项。但这种控制并不是免费的。
任务对话框
功能有两个问题:

  • NET Framework不包含现成的包装器。您需要编写自己的简单包装器,或者下载包含此类包装器的。但是这会给你的代码增加额外的依赖性,你必须决定这是否值得

  • 因为API只在Vista中引入,这意味着程序只能在Vista或更高版本上运行时使用它。如果您仍然需要以Windows XP(或2000)为目标,那么您就不走运了。显示
    任务对话框
    的代码将失败,您需要包含一个回退例程来显示标准的
    消息框
    。当然,这会让您回到您开始的位置,而不需要在那些遗留操作系统上自定义按钮标签。同样,只有您可以决定这是否是您的应用程序和/或部署场景的一个重要问题

  • 另一个选项,是由几代VB程序员使用的,就是打开自己的
    MessageBox
    样式的表单。布置一个简单的表单,其中包含图标/图像、一些标题文本和所有您想要的按钮,并不难。因为您已经创建了整个表单,所以您可以根据自己的代码随意定制它

    如果您在Vista之前的Windows版本中绝对需要此功能,那么创建自己的消息框表单是您唯一的选择。否则,我强烈建议您利用新的
    TaskDialog
    API。在应用程序中这样做可以提高与用户可能安装在其计算机上的其他应用程序的一致性,甚至与Windows本身的一致性。很难确保您自己的自定义消息框表单能够正确地进行一些小操作,例如根据标签文本的长度和用户的屏幕大小自动包装标签文本。以及根据对话框是否包含“取消”按钮,在标题栏中显示/隐藏“X”关闭按钮。标准Windows
    MessageBox
    /
    TaskDialog
    免费为您提供了数量惊人的其他功能,您无需举手。这只是对一般原则的重申:当你不一定要重新发明轮子时,千万不要重新发明轮子

    一个好的折衷办法可能是使用类似的方法。在Vista和更高版本中,如果本机
    TaskDialog
    API可用,它会自动调用该函数。否则,它将使用标准表单并尝试模拟本机
    TaskDialog
    API的行为。我已经编写了一个类似的自定义类供自己使用,但我从来没有在网上发布过它