【问题标题】:C# Windows Form_Closing IssueC# Windows Form_Closing 问题
【发布时间】:2016-01-01 05:16:21
【问题描述】:

当用户单击应用程序右上角的红色“X”按钮时,我似乎很难弹出对话框并正常运行。我可以让对话框显示询问他们是否真的要关闭应用程序,但无论他们点击什么,它都会关闭表单。我的代码如下;

            private void Main_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult dr = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.OKCancel);
        if (dr == DialogResult.Cancel)
        {
            e.Cancel = false;
        }
    }

我也试过代替 e.Cancel 来检查 dr 是否等于 ok 但同样的情况也会发生。

有什么想法吗?

【问题讨论】:

  • e.Cancel = true; 取消操作。

标签: c# windows forms


【解决方案1】:

e.Cancel = true; 取消操作。默认为false。您没有在任何地方将其设置为 true。试试这个。

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dr = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.OKCancel);
    if (dr == DialogResult.Cancel)
    {
        e.Cancel = true;
    }
}

单线:

e.Cancel = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.OKCancel) == DialogResult.Cancel;

【讨论】:

  • 好的,我让它工作它不是博士!= DialogResult.Cancel 但博士 == DialogResult。感谢您的帮助
  • 再问你一个问题。我在菜单条中有一个按钮,它也关闭了表单,但问题是,我将它设置为相同类型的代码。单击确定后,它也会运行 form_closure 代码,因此我会出现一个双对话框。有什么想法吗?
  • 只需从菜单条按钮调用Close();(不要在那里使用额外的检查)。它将触发表单关闭,Main_FormClosing 将运行
【解决方案2】:

问题是您永远不会将e.Cancel 设置为true。我会修改您的消息框以显示是和否按钮,因为我觉得这让用户更清楚,然后如果用户选择否,我会将 e.Cancel 设置为 true。

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dr = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.YesNo);
    e.Cancel = dr == DialogResult.No;
}

【讨论】:

    【解决方案3】:

    Closing 事件在表单关闭时发生。当表单关闭时,对象内创建的所有资源都会被释放,表单也会被释放。如果您取消此事件,表单将保持打开状态。 要取消关闭表单,请将传递给事件处理程序的 CancelEventArgs 的 Cancel 属性设置为 true。

    e.Cancel = true;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多