C# 生成报告后调用父窗口

C# 生成报告后调用父窗口,c#,winforms,forms,windows-forms-designer,C#,Winforms,Forms,Windows Forms Designer,我正在开发WindowsFormApplication,其中有一个主窗体和几个子窗体。 我的一个表单生成报表,之后我希望通过关闭作为报表生成一部分调用的所有其他中间表单来调用父表单。当用户试图使用公共关闭按钮“X”(用于关闭Windows操作系统中的公共窗口的按钮)关闭报表时,我希望调用父窗口 我如何随时从我的任何子窗体访问我的父窗体/启动窗体? 当最后一个表单终止时,如何关闭除主表单之外的所有其他子表单 谁来帮帮我。。 提前感谢。Winforms应用程序中的应用程序对象有一个OpenForms

我正在开发WindowsFormApplication,其中有一个主窗体和几个子窗体。 我的一个表单生成报表,之后我希望通过关闭作为报表生成一部分调用的所有其他中间表单来调用父表单。当用户试图使用公共关闭按钮“X”(用于关闭Windows操作系统中的公共窗口的按钮)关闭报表时,我希望调用父窗口

我如何随时从我的任何子窗体访问我的父窗体/启动窗体? 当最后一个表单终止时,如何关闭除主表单之外的所有其他子表单

谁来帮帮我。。
提前感谢。

Winforms应用程序中的应用程序对象有一个OpenForms集合,其中包含对所有打开表单的引用。您可以从该集合中获取对表单的引用,并对其调用Close()以将其关闭

除了您的注释之外,在finalreport的OnClose事件中,您可以运行以下代码

foreach (Form f in Application.OpenForms)
            {
                if (f.GetType().ToString().Contains("start"))
                    f.Focus();
            }

Winforms应用程序中的应用程序对象有一个OpenForms集合,其中包含对所有打开表单的引用。您可以从该集合中获取对表单的引用,并对其调用Close()以将其关闭

除了您的注释之外,在finalreport的OnClose事件中,您可以运行以下代码

foreach (Form f in Application.OpenForms)
            {
                if (f.GetType().ToString().Contains("start"))
                    f.Focus();
            }

要在关闭最终表单时显示启动表单,可以为最终表单的事件
FormClosed
添加事件处理程序,如下所示:

FinalForm f = new FinalForm();
f.FormClosed += (s,e) => {
   StartupForm sf = new StartupForm();
   sf.Show;
   //if your StartupForm is defined somewhere
   //just call sf.Show();
};
//If you are using VS 2005 or below, you have to define a method for FormClosed event handler (unable to use the lambda expression above
private void FormClosedHandler(object sender, FormClosedEventArgs e){
  StartupForm sf = new StartupForm();
   sf.Show;
   //if your StartupForm is defined somewhere
   //just call sf.Show();
}
//Register the FormClosed event with the event handler above
f.FormClosed += new FormClosedEventHandler(FormClosedHandler);

//show your final form
f.Show();
//if this form is closed, the event FormClosed will be raised and the corresponding event handler (we added above) will be called.

要在关闭最终表单时显示启动表单,可以为最终表单的事件
FormClosed
添加事件处理程序,如下所示:

FinalForm f = new FinalForm();
f.FormClosed += (s,e) => {
   StartupForm sf = new StartupForm();
   sf.Show;
   //if your StartupForm is defined somewhere
   //just call sf.Show();
};
//If you are using VS 2005 or below, you have to define a method for FormClosed event handler (unable to use the lambda expression above
private void FormClosedHandler(object sender, FormClosedEventArgs e){
  StartupForm sf = new StartupForm();
   sf.Show;
   //if your StartupForm is defined somewhere
   //just call sf.Show();
}
//Register the FormClosed event with the event handler above
f.FormClosed += new FormClosedEventHandler(FormClosedHandler);

//show your final form
f.Show();
//if this form is closed, the event FormClosed will be raised and the corresponding event handler (we added above) will be called.

请给我推荐一些代码。。我的启动表单名为“开始”,最终表单名为“最终报告”。。当我关闭表单“finalreport”时,我想调用我的启动表单。我尝试了它。。但是,当我关闭最终表单时,启动表单未被调用:(请建议我一些代码。)我的启动表单名称为“开始”,最终表单名称为“最终报告”。我想在关闭表单“最终报告”时调用启动表单。我试过了。但当我关闭最终表单时,启动表单未被调用:(您如何显示您的
最终报告
表单?我想知道您是如何组织表单的。例如,我通常在我的主表单的类中定义我的子表单/子表单成员。因此,我可以轻松地在主表单中显示任何子表单/子表单。我单独创建了每个表单,并在需要时通过在partic上创建对象调用它们。)规则形式类似:第一种形式..第二种形式fr=new secondform();fr.show();您如何显示您的
最终报告
表单?我想知道您如何组织表单。例如,我通常在我的主表单的类中定义我的子表单/子表单成员。因此,我可以轻松地在主表单中显示任何子表单/子表单。我单独创建了每个表单,并在需要时通过在partic上创建对象调用它们规则形式类似:第一种形式..第二种形式fr=new secondform();fr.show();此代码中的s和e是什么..我得到了错误'e'undeclared@RavitejA我猜您使用的是VS 2005或以下版本,它不支持
Lambda表达式
。我写的是
Lambda表达式
。我使用的是vs2008…当关闭最终表单时,您可以详细说明事件处理程序吗?这段代码中的s和e是什么。我得到了错误或“e”undeclared@RavitejA我猜您使用的是VS 2005或以下版本,它不支持
Lambda表达式
。我写的是
Lambda表达式
。我使用的是vs2008…在关闭最终表单时,您可以详细说明事件处理程序吗?