使用自定义按钮在C#中创建消息框

使用自定义按钮在C#中创建消息框,c#,winforms,C#,Winforms,想知道是否有可能创建一个带有自定义按钮的MessageBox,类似于java中showOptionDialog的功能 String[]colors = {"Red", "Green", "Blue"}; int color = JOptionPane.showOptionDialog(null, "Please choose color", "Color please", 0, JOptionPane.INFORMATION_MESSAGE,null, colors, colors[0]); i

想知道是否有可能创建一个带有自定义按钮的MessageBox,类似于java中showOptionDialog的功能

String[]colors = {"Red", "Green", "Blue"};
int color = JOptionPane.showOptionDialog(null, "Please choose color", "Color please", 0, JOptionPane.INFORMATION_MESSAGE,null, colors, colors[0]);
if(color == 0)
{
  JOptionPane.showMessageDialog(null, "Red it is");
}

这在C#中的等价物是什么?

恐怕答案是:你不能

据我所知,没有办法改变MessageBox。您需要编写自己的对话框(并不是那么难)


可能MessageBox类在最后进行了WinApi调用,这可能是主要原因。

我认为您不能。messagebox类只有私有构造函数,因此无法从中派生。但是,正如SoMoS已经编写的那样,您可以使用windows窗体及其showdialog()方法创建自己的自定义消息框。希望它有帮助

我想这正是你想要的:

这里是类似的方法,在C++中,但有更多解释:

注意:请注意,WinApi messagebox经过优化,即使在非常低的内存条件下也能显示。因此,操作系统可以在崩溃或内存不足的情况下显示消息


如果你把它弄乱了,像上面那样,你可能会失去一些健壮性。

我不知道java showOptionDialog,但也许这会有帮助:-CodeProject上也有其他类似的,但我注意到你的“WinForms”标签…标题上写着C。关于Java的问题?这是哪一个?写一个只说“另一个答案是正确的”的答案有什么意义?如果你觉得另一个答案是正确的,就把它投上去。答案是用来回答问题的,而不是用来放东西的。如果你想分享一些与问题/答案相关的趣闻轶事,但这些趣闻轶事并不能构成完整的答案,那么你应该将它们作为评论发布。在这种情况下,这是合适的回答。没错,他可以投票,但两个答案都有区别,firefly提到OP可以使用windows窗体和ShowDialog()来获得这样的消息框。