Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从第二个窗体终止应用程序不会停止调试_C#_Winforms_Visual Studio 2010 - Fatal编程技术网

C# 从第二个窗体终止应用程序不会停止调试

C# 从第二个窗体终止应用程序不会停止调试,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,我有一个使用多个表单的程序,我希望能够从表单2中终止应用程序,使其不再运行或调试 这是我尝试过的代码: private void exitToolStripMenuItem_Click(object sender, EventArgs e) { Form1 frm = new Form1(); frm.Close(); this.Close(); } 使用上面的代码会关闭表单,但不会停止调

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

这是我尝试过的代码:

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

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

如果要关闭整个应用程序,可以调用。

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

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

如果希望Form2关闭原始Form1,则需要向Form2传递对Form1的引用,以便Form2可以调用Form1父实例上的close()


wRar有您想要的答案。

您可以执行应用程序。按照wRar的建议退出,或者尝试以下替代方法

在给出的示例中:

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();
}

Form1是推出Form2的主要表单吗?“工具条”菜单“单击显示”在表单2中?请注意,您掌握了其中的诀窍:)在您的示例中,表单1不会关闭,因为您没有对它的引用调用“关闭”,而是对它的新实例调用“关闭”。真不敢相信我没有尝试过。谢谢