应用程序关闭DialogResult

时间:2012-05-08 19:09:00

标签: c# visual-studio user-interface messagebox dialogresult

我有一个C#GUI应用程序。当用户点击红色'X'(关闭应用程序)时,我想显示一条消息并询问他是否真的要关闭它。

我找到了解决方案:

        DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "SomeTitle", MessageBoxButtons.YesNo);
        if (dialog == DialogResult.Yes)
        {
            Application.Exit();
        }else if (dialog == DialogResult.No)
        {
          //don't do anything
        }

当用户点击“是”时,应用程序应完全终止。 (Application.Exit()是否正确用于此目的?)

当用户单击“否”时,DialogResult / MessageBox应该关闭,但应用程序应保持打开状态。然而,它关闭!!

我该如何避免这种情况?

BTW:我使用的是Visual Studio 2010和Winforms。

4 个答案:

答案 0 :(得分:4)

使用表单中的 FormClosing 事件,并使用FormClosingEventArgs取消该过程。

示例:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult dialog = dialog = MessageBox.Show("Do you really want to close the program?", "SomeTitle", MessageBoxButtons.YesNo);
        if (dialog == DialogResult.No)
        {
            e.Cancel = true;
        }
    }

答案 1 :(得分:2)

使用程序窗口的表单FormClosing事件。如果用户点击,您可以将e.Cancel设置为true

this.FormClosing += (s, e) => {
  DialogResult dialog = dialog = MessageBox.Show("Really close?", "SomeTitle",
    MessageBoxButtons.YesNo);
  if (dialog == DialogResult.No)
  {
    e.Cancel = true;
  }
};

我猜你正在使用FormClosed。你是?那太晚了。

答案 2 :(得分:0)

试试这个

        this.FormClosing += new FormClosingEventHandler(delegate(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Do you really want to exit this application?", MessageBoxButtons:=MessageBoxButtons.YesNo) == DialogResult.No)
            {
                e.Cancel = true;
            }
        });

答案 3 :(得分:0)

参考木渎的回答。

除非您为MessageBox.Show()指定其他参数,否则您无法从默认DialogResult.Ok获取MessageBox以外的任何结果。

您发布的代码(减去dialog = dialog =的小错字)与我预期完全一样。

另外:Application.Exit() IS 关闭应用程序的正确方法:)