我有一个form1,从这个form1转到new form2,form2 new form 3 ...当我关闭form1然后应用程序关闭。但是,我想在关闭应用程序之前关闭所有表单。
答案 0 :(得分:1)
你可以尝试
foreach(Form f in Application.OpenForms)
{
f.Close();
}
您可以根据需要进行调整。
上查看更多内容答案 1 :(得分:0)
只需写下此内容即可显示每个表单
Form1 f=new Form1();
f.ShowDialog();
答案 2 :(得分:0)
如果我正确地理解了这个问题(我可能不会......它很难阅读),你想要的是确保关闭你的第一个表格并不关闭整个程序,那个关闭最后一个表格。如果是这种情况,那么您需要进行以下更改:
在Program.cs文件中,您将拥有一些看起来像Application.Run(new Form1());
的代码。这会将Form
实例传递给Run()
方法,Run()
方法将自动返回并允许程序在Form
实例关闭时退出。
相反,不要将任何内容传递给Run()
。使用无参数重载:Application.Run();
您仍然需要创建第一个Form
实例并显示它。例如。在致电Application.Run();
之前添加:
new Form1().Show();
完成此操作后,您需要在实际希望程序结束时调用Application.Exit()
。因此,在您显示的最后一个表单中,覆盖OnFormClosed()
:
protected override voide OnFormClosed(FormClosedEventArgs e)
{
base.OnFormClosed(e);
Application.Exit();
}
如果这不是您想要做的,请尝试更仔细地说出您的问题并更详细地解释您想要的内容。
答案 3 :(得分:0)
如果您的表单必须在应用程序终止之前关闭,那么似乎以模态方式显示表单更合适,而不是无模式。与[此答案]建议一样,将formX.Show()
替换为formX.ShowDialog()
即可。这将以模态方式显示formX
形式,即它将阻止对父窗体的所有输入。
您也可以尝试覆盖或订阅您的子表单' OnFormClosing
事件并取消关闭那里的表单:
protected override void OnFormClosing(FormClosingEventArgs e)
{
… // you can stop form closing via setting `e.Cancel` here.
// or query `e.CloseReason` to find out why your form should be closed
}
如果确实要手动关闭应用程序的所有打开表单,请按this answer建议并迭代System.Windows.Forms.Application.OpenForms
集合返回的表单。
答案 4 :(得分:0)
类System.Windows.Forms.Form有一个事件FormClosing。你可以在那里处理表格的关闭。
在form1中:
public void form1_FormClosing(object sender, FormClosingEventArgs e) {
form2.Close()
// if we have the instances of form3, form4 here, then:
// form3.Close()
// form4.Close()
}
在form2中:
public void form2_FormClosing(object sender, FormClosingEventArgs e) {
form3.Close()
}
等