我想在关闭应用程序之前关闭所有表单

时间:2014-12-01 07:22:34

标签: c# winforms

我有一个form1,从这个form1转到new form2,form2 new form 3 ...当我关闭form1然后应用程序关闭。但是,我想在关闭应用程序之前关闭所有表单。

5 个答案:

答案 0 :(得分:1)

你可以尝试

foreach(Form f in Application.OpenForms)
{
    f.Close();
}

您可以根据需要进行调整。

Application.OpenForms

上查看更多内容

答案 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()
}