问题:我创建了一个有两种形式的程序。在Form1上按下按钮时,程序“隐藏”Form1并“显示”Form2。问题是,当我关闭Form2时,程序继续在后台运行,我相信这是因为程序需要关闭Form1而不是隐藏以便程序结束。
我的问题是如何覆盖第二个表格以关闭程序而不是隐藏?
private void btnCreate_Click(object sender, EventArgs e)
{
Form2.Show();
Form1.Hide();
}
我知道我可以再次从Form2中显示Form1,然后关闭,但我真的想避免这种情况。
答案 0 :(得分:4)
根据您的应用程序的不同,您没有多少选择。
首先,直观的解决方案是为Close()
调用Hide()
而不是Form1
。仅当Form1
不是应用程序的 main 形式时(主要消息循环内部以Application.Run()
开头),此方法才有效。
第二个解决方案是为FormClosed
Form2
事件添加事件处理程序,并在第二个表单关闭时关闭第一个表单:
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();
}
当所有者关闭时,这将自动关闭所拥有的表单。这是我更喜欢的解决方案,但它仅适用于一种形式(所有者只能拥有一种形式)。
答案 1 :(得分:3)
您可以使用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();
}
答案 2 :(得分:0)
在应用程序开发中,特别是对于用户而言的winforms,总是有一个主表单(无论是mdiparent还是单个父表单),它始终是所有其他表单显示的主表单。
回答这个问题将会鼓励糟糕的编程实践。
让主窗口关闭,应用程序结束。隐藏form1不会结束申请。