在MessageBox/DialogBox上添加单选按钮

4

是否有可能在没有创建表单的情况下,在msgbox / dialog消息上添加单选按钮,例如:

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

我想实现的是,通过Yes/No按钮,我可以在消息的上部添加一个单选按钮,而不需要创建新的winform/userform。
如果可行,请告诉我如何实现,并提供任何有助于完成这些工作的参考资料。

你可以创建一个包含所需控件的新窗体,然后使用它来代替msgbox吗? - Mech_Engineer
可能是使用C#创建带有单选按钮的输入框的重复问题。 - Mech_Engineer
嗨,Mech_Engineer!我只想要一个MessageBox出现,而不需要创建一个带有单选框的新表单。 - Alvin Quezon
嗨!看起来你给我的参考资料不符合我的期望。除了创建用户窗体之外,还有其他的参考资料吗?用户窗体会占用大量内存! - Alvin Quezon
1
不,它并不会“占用大量内存”。你实际上无法测量MessageBox和一个带有几个控件的窗体之间的内存差异。 - Cody Gray
1个回答

5
正如建议的那样,简单的解决方法是创建自己的表格并使用ShowModal方法显示它。它将像MessageBox一样工作,但您可以在上面放置任何控件。
你似乎对此不满意。实际上,有一种方法可以使用消息框来完成这个操作,但它太复杂了。它涉及安装一个钩子,在显示消息框时触发,然后编写一堆代码动态添加控件和操作消息框的布局。这将需要使用一堆P/Invoke,因为消息框是本机Win32对话框,而不是Windows窗体。包装类将没有任何帮助。真的不值得。消息框不是设计为可扩展的。
考虑使用任务对话框。这几乎就是它们的设计目的。您可以使用一系列命令按钮描述可用的选择,而不是单选按钮。这是更好的用户界面,因为只需要单击一次即可进行选择,而不是两次。它将看起来像这样:

“是否保存您的工作?”被称为主要指令,应该保持非常简短。然后,在其下方有一个补充说明,如果用户想阅读更多详细信息,可以提供更多细节。最后,您有一系列命令链接,其中包含单击它们时会发生什么的简短和详细描述。在这种情况下,“保存工作”和“不保存”。
(这个例子是愚蠢地使用任务对话框。你应该只使用普通的按钮来保存/不保存。但这是我在谷歌图片上找到的最好的例子。)
如果您想,实际上可以将单选按钮放入任务对话框中:

事实上,正如该图所示,您可以将几乎任何内容放入任务对话框中——太多了。它非常可定制。这是它比古老的MessageBox API提供的重大改进。
有一个.NET包装器可用于Task Dialog API,在此处

感谢您的出色回复,Cody Gray!这个参考资料将对我完成软件非常有帮助。非常感谢! - Alvin Quezon

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