MessageBoxResult vs. DialogResult

本文关键字:DialogResult vs MessageBoxResult | 更新日期: 2023-09-27 18:23:58

这里有两个问题,希望可以。

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

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.5MessageBoxResult不应该工作吗?

当我尝试调用它时,我会得到

找不到类型或命名空间名称MessageBoxResult(分别为缺少using指令或程序集引用?)。

但是,当我使用DialogResult时,它工作得很好。为什么会这样?

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

case DialogResult.No:
break;

如果有人点击对话框上的Cancel按钮,除了休息之外,还应该在里面放什么吗?或者没有它一切都会好起来吗?

MessageBoxResult vs. DialogResult

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

对于No的情况,仅使用break语句即可。但是在这里使用switch语句是过分的。CCD_ 13就足够了。

然而,请注意,这不是一种理想的方式来做你想做的事情。如果用户单击窗口边框上的"关闭"按钮,或按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,可以取消表单的关闭。如果不执行任何操作,则允许表单关闭。

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

正如您所看到的,名称空间是不同的:System.Windows.Forms(Winforms)和System.Windows(WPF)。