【发布时间】:2021-11-14 14:18:39
【问题描述】:
所以我想显示一个表单并关闭另一个表单,所以我在 form1 中执行了此操作:
private void newTaskToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 x = new Form2();
x.Show();
this.Hide();
//didn't use this.close() cause then the whole program will close instead of
//just the current form
}
然后我希望在第二个表单关闭后再次打开主表单,所以我在 form2 中执行了此操作:
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Form1 x = new Form1();
x.Show();
}
现在的问题是当我在关闭第二个表单后回到主表单时。如果我关闭主窗体,它不会完全关闭并且仍然在后台保持打开状态(我在任务管理器中找到了它)。我认为这是因为“显示”方法只是打开另一个表单而不是让表单出现,所以隐藏的主表单仍然在后台运行。 我应该怎么做才能使表单在退出时关闭? 我试着把 this.close();在表单关闭和表单关闭事件中,但都导致崩溃。
【问题讨论】:
-
Form2_FormClosed事件正在创建一个“新的”Form1,而From1已经存在!所以你可能在代码中显示/关闭Form1,但它不是你想要显示或关闭的Form1。在newTaskToolStripMenuItem_Click……你试过了吗……x.ShowDialog()THEN,你可以关闭Form1。类似于...x.ShowDialog();然后this.Close();... 由于表单显示为“对话框”,因此执行将“等待”直到Form2在调用this.Close();之前关闭。 -
另外……你应该注意一个特定的代码行……
this.Hide();……基本上……当执行通过这行代码时……然后……从技术上讲……你失去了对form1的任何引用……这就是为什么你必须在form2中“创建”一个新的Form1。您当然可以将form1传递给form2,但是,如果您只是想在form2关闭时关闭form1,则这是不必要的。只需使用form2.ShowDialog()并按照您最初的意图使用this.Close()。
标签: c#