在 MessageBox/DialogBox 上添加单选按钮

Adding Radio Buttons on a MessageBox/DialogBox

是否可以在 msgbox/dialog 消息上添加单选按钮而不创建如下表单:

MessageBox.Show("Select Option", "Test", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

我想要实现的是,使用 Yes/No 按钮,我可以在消息的上部添加一个单选按钮,而无需创建新的 winform/userform.

让我知道这是否可以实现,如果可以,请给我任何可能有助于实现这些东西的好的参考。

正如所建议的那样,简单的解决方案是创建您自己的表单并使用 ShowModal 方法显示它。它将像 MessageBox 一样工作,但您可以在其上放置任何您想要的控件。

你似乎对此不满意。事实上,有一种方法可以用消息框来做到这一点,但是方法太复杂了。它涉及安装一个将在显示消息框时触发的挂钩,然后编写一堆代码来动态添加控件并操纵消息框的布局。这必须用一堆 P/Invoke 来完成,因为消息框是本机 Win32 对话框,而不是 Windows 窗体。包装器 类 不会有任何帮助。真的不值得。消息框未设计为可扩展。

考虑改用 Task Dialog。这几乎正​​是它们的设计目的。您可以使用一系列描述可用选项的命令按钮来代替单选按钮。这是一个更好的 UI,因为只需单击一次即可做出选择,而不是两次。它看起来像这样:

"Do you want to save your work?" 称为主要指令,应保持非常短。然后在它下面有一个补充说明,提供更多详细信息,如果用户想要阅读的话。最后,您拥有一系列命令链接,其中包含对用户单击它们时将发生的情况的简短而详细的描述。在这种情况下,"Save work" 和 "Don't save".

(该示例是对任务对话框的愚蠢使用。您应该只使用常规的旧按钮 Save/Don 不保存。但这是我在 Google 图像上可以找到的最佳示例.)

如果需要,您实际上可以将单选按钮放入任务对话框中:

事实上,如图所示,您几乎可以在任务对话框中添加任何您想要的内容——太多了。这是非常可定制的。这是它对古老的 MessageBox API 的重大改进。

任务对话框有一个 .NET 包装器 API 可用 here