【问题标题】:Application Close on DialogResultDialogResult 上的应用程序关闭
【发布时间】:2012-05-17 07:22:12
【问题描述】:

我有一个 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 应该关闭,但应用程序应该保持打开状态。但是,它关闭了!

我怎样才能避免这种情况?

顺便说一句:我使用 Visual Studio 2010 和 Winforms。

【问题讨论】:

  • 不要这样做;这真的很烦人。
  • 我一直希望听到“是的,该死的!”这样一个对话框上的按钮,所以它永远不会再问我这么愚蠢的事情,但还没有见过。将 this.DialogResult 属性设置回 None 以防止它关闭。
  • 对不起,但这不是很有帮助。这是实现这一点的要求,所以这就是我问的原因;)

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


【解决方案1】:

使用程序窗口的表单FormClosing 事件。然后,如果用户单击 no,您可以将 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。你是?那么为时已晚。

【讨论】:

  • 好点。 FormClosed 在事件列表中的 FormClosing 之后调用。
【解决方案2】:

试试这个

        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】:

    使用表单中的 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;
            }
        }
    

    【讨论】:

    • 好的,我应该期待 3 个几乎相等的响应 :(.
    • e 是 formcloseingeventargs。 e.cancel 表示取消表单关闭,因此它将重新打开。
    • 我将这个代码用于我的第一个表单。它工作正常。我再次将此代码用于该应用程序中的第二种形式。但它工作不正常。两次出现确认框退出应用程序。为什么?
    【解决方案4】:

    参考木渎的回答。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-16
      • 2018-02-19
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      相关资源
      最近更新 更多