如何从Windows窗体2.0中的子窗体关闭父窗体?

时间:2008-09-03 00:27:30

标签: c# winforms

我需要从Windows应用程序中关闭子窗体内的父窗体。最好的方法是什么?

7 个答案:

答案 0 :(得分:4)

我遇到了这个博客条目,看起来它会起作用,它使用D2VIANT答案的事件处理程序概念

http://www.dotnetcurry.com/ShowArticle.aspx?ID=125

要点: 第1步:创建一个新的Windows应用程序。打开Visual Studio 2005或2008.转到文件>新>项目>在“项目类型”>中选择Visual Basic或Visual C#。 Windows应用程序。为项目命名和位置>行。

第2步:添加一个n 以项目形式出现。右键单击项目>添加> Windows窗体> Form2.cs>添加。

步骤3:现在在Form1中,拖放一个按钮'btnOpenForm'并双击它以生成一个事件处理程序。在其中写下以下代码。还要添加frm2_FormClosed事件处理程序,如下所示:

    private void btnOpenForm_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed);
        frm2.Show();
        this.Hide();
    }


    private void frm2_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Close();
    }

答案 1 :(得分:3)

当您在WinForms中关闭表单时,它会释放它的所有子项。所以这不是一个好主意。您需要异步执行此操作,例如,您可以向父表单发送消息。

答案 2 :(得分:0)

Form类没有提供对'parent'表单的任何类型的引用,因此没有直接访问父类的方法(除非它恰好是MDI父类,在这种情况下你可以通过它访问它) MDIParent属性)。您必须在子项的构造函数或属性中传递对父项的引用,然后记住设置它,然后使用该引用强制父项关闭。

答案 3 :(得分:0)

或许考虑让父订阅子事件上的事件,并且孩子可以在想要关闭父事件时触发该事件。然后,父母可以处理它自己的关闭(以及孩子的关闭)。

答案 4 :(得分:0)

你显然正在使用正确的方式来打开和关闭表格。如果您使用任何形式的MVC或MVP,则不会出现此问题。

所以使用MVP或MVC的形式来解决这个问题。

答案 5 :(得分:0)

我同意davidg;您可以将父表单的引用添加到子表单的构造函数,然后根据需要关闭父表单:

private Form pForm;
public ChildForm(ref Form parentForm)
{
    pForm = parentForm;
}

private closeParent()
{
    if (this.pForm != null)
        this.pForm.Close();
    this.pForm = null;
}

答案 6 :(得分:0)

这是一个非常简单的解决方案。

问题(可以肯定):启动应用程序(主窗体)>主要表格VIA按钮或任何活动的公开儿童表格>关闭(主要表格)但儿童表格也关闭。

解决方案:

  

使用:Process.Start("Your_App's_EXE_Full_Path.exe");

示例:尝试此操作以获取完整路径:

  
      
  1. string FullPath = Environment.CurrentDirectory + "\\YourAppName.exe";

  2.   
  3. Process.Start(FullPath);

  4.   
  5. this.Close();

         
        
    • 这样你就可以保留你想要保持开放的每一个表格。
    •   
  6.