C# 无法从';字符串';至';System.Windows.Forms.MessageBox图标

C# 无法从';字符串';至';System.Windows.Forms.MessageBox图标,c#,string,messagebox,C#,String,Messagebox,我正在开发一款软件,可以让您生成自己定制的Messagebox。在我尝试输入MessageBox按钮和MessageBox图标之前,我的代码没有错误。然后,我得到一个错误 2参数3:无法从“字符串”转换为“System.Windows.Forms.MessageBoxButtons”,错误3参数4:无法从“字符串”转换为“System.Windows.Forms.MessageBoxIcon”。这里的问题是什么 第3个和第4个参数不需要字符串值。您应该传递类型为MessageBoxButton和

我正在开发一款软件,可以让您生成自己定制的
Messagebox
。在我尝试输入MessageBox按钮和
MessageBox图标之前,我的代码没有错误。然后,我得到一个错误

2参数3:无法从“字符串”转换为“System.Windows.Forms.MessageBoxButtons”,错误3参数4:无法从“字符串”转换为“System.Windows.Forms.MessageBoxIcon”。这里的问题是什么

第3个和第4个参数不需要字符串值。您应该传递类型为
MessageBoxButton
MessageBoxIcon

因此,您可以在if-else条件中指定所需的类型,而不是指定字符串值

MessageBoxButton previewbutton;
MessageBoxIcon previewtype;

 if (radioButton1.Checked == true)
    previewtype = MessageBoxIcon.Error;

这个问题是当你说

MessageBox.Show(textBoxX1.Text, richTextBoxEx1.Text, previewbutton, previewtype);
您正在将名为
previewButton
previewtype
的两个字符串作为参数传递给MessageBox。当系统需要在其位置键入
MessageBoxButtons
MessageBoxIcon
时,显示方法

正在使用的for
MessageBox.Show
方法如下

MessageBox.Show(String, String, MessageBoxButtons, MessageBoxIcon)

但是您正在传递两个字符串-因此出现了错误。

错误是因为您正在将字符串传递到MessageBox.Show(),您应该在其中传递MessageBoxButtons和MessageBoxIcon。换句话说,您不能这样做:

MessageBox.Show("Some text", "a caption", "MessageBoxButtons.AbortRetryIgnore", "MessageBoxIcon.Error");
但你可以这样做:

MessageBox.Show("Some text", "a caption", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error);
previewtype和previewbutton变量应定义为实际类型,而不是字符串:

MessageBoxIcon previewtype;
MessageBoxButtons previewbutton;
如果我们更新您的示例以使用正确的数据类型,则如下所示:

if (textBoxX1.Text == String.Empty)
    MessageBox.Show("You must enter a title.");
else if (richTextBoxEx1.Text == String.Empty)
    MessageBox.Show("You must enter a body.");
else
{
    MessageBoxIcon previewtype;
    MessageBoxButtons previewbutton;
    if (radioButton1.Checked == true)
        previewtype = MessageBoxIcon.Error;
    else if (radioButton2.Checked == true)
        previewtype = MessageBoxIcon.Information;
    else if (radioButton3.Checked == true)
        previewtype = MessageBoxIcon.Exclamation;
    else if (radioButton4.Checked == true)
        previewtype = MessageBoxIcon.Question;
    if (radioButton8.Checked == true)
        previewbutton = MessageBoxButtons.AbortRetryIgnore;
    else if (radioButton7.Checked == true)
        previewbutton = MessageBoxButtons.OK;
    else if (radioButton6.Checked == true)
        previewbutton = MessageBoxButtons.OKCancel;
    else if (radioButton5.Checked == true)
        previewbutton = MessageBoxButtons.RetryCancel;
    else if (radioButton9.Checked == true)
        previewbutton = MessageBoxButtons.YesNo;
    else if (radioButton10.Checked == true)
        previewbutton = MessageBoxButtons.YesNoCancel;
    MessageBox.Show(textBoxX1.Text, richTextBoxEx1.Text, previewbutton, previewtype);

但是用户应该选择图标和按钮。所以我可以做一些类似“MessageBoxIcon previewtype=MessageBoxIcon.惊叹号”的事情?没错。我刚刚更新了答案,以显示更正后的代码是什么样子的。您通常只需删除所有引号即可。:)谢谢,这正是我需要的!
MessageBoxIcon previewtype;
MessageBoxButtons previewbutton;
if (textBoxX1.Text == String.Empty)
    MessageBox.Show("You must enter a title.");
else if (richTextBoxEx1.Text == String.Empty)
    MessageBox.Show("You must enter a body.");
else
{
    MessageBoxIcon previewtype;
    MessageBoxButtons previewbutton;
    if (radioButton1.Checked == true)
        previewtype = MessageBoxIcon.Error;
    else if (radioButton2.Checked == true)
        previewtype = MessageBoxIcon.Information;
    else if (radioButton3.Checked == true)
        previewtype = MessageBoxIcon.Exclamation;
    else if (radioButton4.Checked == true)
        previewtype = MessageBoxIcon.Question;
    if (radioButton8.Checked == true)
        previewbutton = MessageBoxButtons.AbortRetryIgnore;
    else if (radioButton7.Checked == true)
        previewbutton = MessageBoxButtons.OK;
    else if (radioButton6.Checked == true)
        previewbutton = MessageBoxButtons.OKCancel;
    else if (radioButton5.Checked == true)
        previewbutton = MessageBoxButtons.RetryCancel;
    else if (radioButton9.Checked == true)
        previewbutton = MessageBoxButtons.YesNo;
    else if (radioButton10.Checked == true)
        previewbutton = MessageBoxButtons.YesNoCancel;
    MessageBox.Show(textBoxX1.Text, richTextBoxEx1.Text, previewbutton, previewtype);