MessageBoxResult与DialogResult

时间:2012-02-10 16:54:20

标签: c# .net

这里有两个问题,希望没问题。

首先,主要是,我试图在用户退出我的应用程序时提示他们是否真的要退出。我的代码如下:

private void exitToolStrip_Click(object sender, EventArgs e)
{
    DialogResult mBoxResult = MessageBox.Show("Would you like to exit the program?", "Exit Program", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    switch (mBoxResult)
    {
        case DialogResult.Yes:
            this.Close();
            break;
        case DialogResult.No:
            break;
    }
}

根据MSDN,我应该使用MessageBoxResult mBoxResult而不是DialogResult mBoxResult

我正在使用.NET Framework 3.5。我看过pre-3.0 DialogResult应使用3.5的{​​{3}},但如果我使用的是MessageBoxResult,那么MessageBoxResult不应该有效吗?

当我试着打电话时,我得到了

  

无法找到类型或命名空间名称case DialogResult.No: break; (是   你错过了using指令或程序集引用?)。

但是,当我使用DialogResult时,它工作正常。这是为什么?

我的第二个问题是关于这段代码:

Cancel

如果有人按下对话框上的{{1}}按钮,除了休息之外放置任何东西是否合适?或者没有它,一切都会好起来吗?

2 个答案:

答案 0 :(得分:11)

DialogResult适用于WinForms。 MessageBoxResult适用于SilverLight。

只有break语句适用于No案例。但是在这里使用switch语句是过度的。 if (response == yes) Close();就足够了。

但请注意,这不是理想的做法。如果用户单击窗口边框上的关闭按钮,或按ALT + F4,该怎么办?相反,您应该处理FormClosing事件:

private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("Would you like to exit the program?", "Exit Program", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
        e.Cancel = true;
}

通过将e.Cancel设置为true,您可以取消对表单的关闭。如果不执行任何操作,则允许表单关闭。

答案 1 :(得分:7)

  • 如果您的应用程序是WinForms应用程序,请使用DialogResult
  • 如果您的应用程序是WPF / Silverlight应用程序,请使用MessageBoxResult

如您所见,名称空间不同:System.Windows.Forms(Winforms)与System.Windows(WPF)。