如何关闭C#程序,从第二个形式(不隐藏)C#多形式问题
本文关键字:隐藏 多形式 问题 程序 何关闭 第二个 | 更新日期: 2023-09-27 18:36:27
>问题:我创建了一个有两种形式的程序。当按下 Form1 上的按钮时,程序将"隐藏"窗体 1 并"显示"窗体 2。问题是,当我关闭 Form2 时,程序继续在后台运行,我相信这是因为程序需要关闭 Form1,而不是隐藏才能结束程序。
我的问题是如何覆盖第二种形式以关闭程序而不是隐藏?
private void btnCreate_Click(object sender, EventArgs e)
{
Form2.Show();
Form1.Hide();
}
我知道我可以从 Form2 再次显示 Form1,然后关闭,但我真的很想避免这种情况。
根据
应用程序的情况,您几乎没有选择来执行此操作。
第一个直观的解决方案是调用Close()
而不是Hide()
Form1
。仅当Form1
不是应用程序的主要形式(主消息循环中的主消息循环以 Application.Run()
开头)时,这才有效。
第二种解决方案是为 Form2
的FormClosed
事件添加一个事件处理程序,并在第二个窗体关闭时关闭第一个窗体:
private void btnCreate_Click(object sender, EventArgs e)
{
Form2.Show();
Form2.FormClosed += new FormClosedEventHandler(delegate { Close(); });
Form1.Hide();
}
您可以直接关闭Form1
或呼叫Application.Exit()
(如果您确实打开了多个要一起关闭的表单)。
最后一个解决方案是使第二个窗体成为第一个窗体的所有者:
private void btnCreate_Click(object sender, EventArgs e)
{
Form2.Show();
Form1.Owner = Form2;
Form1.Hide();
}
这将在所有者关闭时自动关闭拥有的窗体。这是我更喜欢的解决方案,但它仅适用于一种表单(所有者只能拥有一个表单)。
您可以使用
FormClosed
事件:
private void btnCreate_Click(object sender, EventArgs e)
{
Form2.Show();
Form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);
Form1.Hide();
}
void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Form1.Close();
}
在应用程序开发中,特别是为了用户的利益,始终有一个主窗体(无论是 mdiparent 还是单个父窗体),该窗体将始终是所有其他窗体显示的主窗体。
给出问题的答案将鼓励不良的编程实践。
让主窗体关闭,应用程序将结束。隐藏 form1 不会结束应用程序。