C# 验证MessageBox上的案例

C# 验证MessageBox上的案例,c#,winforms,C#,Winforms,我有这样的信息框: if (MessageBox.Show("Message", "System message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.No) { } 现在我想添加带有“是”和“取消”的其他案例,因为它是MessageBoxButtons。是的不取消,所以我尝试如下: if (MessageBox.Show("Message", "System message"

我有这样的信息框:

 if (MessageBox.Show("Message", "System message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.No)
 {
 }
现在我想添加带有“是”和“取消”的其他案例,因为它是
MessageBoxButtons。是的不取消
,所以我尝试如下:

 if (MessageBox.Show("Message", "System message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.No)
 {
 }
 else if (DialogResult.Yes)
 {
     return;
 }
 else if (DialogResult.Cancel)
 {
     return;
 }
但VisualStudio用红色标记并抛出:

无法将类型“System.Windows.Forms.DialogResult”隐式转换为 “布尔”


如何在验证中添加“是”和“取消”案例?

您需要将结果存储在类型为
DialogResult
的变量中:

var dialogResult = MessageBox.Show("Message", "System message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (dialogResult == DialogResult.No)
{
}
else if (dialogResult  == DialogResult.Yes)
{
    return;
}
else if (dialogResult == DialogResult.Cancel)
{
   return;
}
这样写会更好:

var dialogResult = MessageBox.Show("Message", "System message",
                                   MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (dialogResult  == DialogResult.Yes || dialogResult == DialogResult.Cancel)
{
    return;
}

// logic for No here
// as this means No was pressed

问题是您应该将
MessageBox.Show()
的结果存储到一个变量中,然后使用
if
switch
将结果与
对话框result
枚举中的一个值进行比较

DialogResult result = MessageBox.Show("Message", "System message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

if (result == DialogResult.Yes) {
    // do something for yes
} 
else if (result == DialogResult.Cancel)
{
   // do something for cancel
}
else
{
    // this will be no
}

将结果存储在一个变量中,并使用该变量在您的if/else块中进行比较,否则您可能会将其称为2或3倍您喜欢的可能性。