-1

我有一个使用多种表单的程序,我希望能够从表单 2 中终止应用程序,使其不再运行或调试。

这是我尝试过的代码:

 private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form1 frm = new Form1();
            frm.Close();
            this.Close();
        }

使用上面的代码会关闭表单,但不会停止调试过程,我不确定这是否是一个问题!

4

3 回答 3

3

如果您想关闭整个应用程序,您可以调用Application.Exit.

于 2013-02-06T23:28:10.567 回答
1

您的代码不起作用的原因是您正在创建 Form1 的一个新的单独实例,而不是从中启动 Form 2 的实例。

因此,您正在创建 Form1 的新实例,然后关闭新的 Form1,然后关闭 Form2。虽然从不引用打开 Form2 的 Form1 的实例。

如果您希望 Form2 关闭原始 Form1,则需要将 Form2 的引用传递给 Form1,以便 Form2 可以调用 Form1 的父实例上的 Close()。

wRar 有您正在寻找的答案。

于 2013-02-06T23:41:38.503 回答
1

您可以按照 wRAR 的建议执行 Application.Exit,或尝试以下替代方法。

在给出的示例中:

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
    Form1 frm = new Form1();
    frm.Close();
    this.Close();
}

Form1 不会关闭,因为您没有在对它的引用上调用 Close,而是在它的新实例上调用 close。

相反,如果您不想使用 Application.Exit,则始终可以执行以下操作,假设您调用了 Form2.Show(this) 并引用了 Form1:

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{      
    this.Close();
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
   if ( this.Owner != null )
     this.Owner.Close();
}
于 2013-02-06T23:48:50.513 回答