C# 拥有的窗体和mdi父级

C# 拥有的窗体和mdi父级,c#,winforms,forms,C#,Winforms,Forms,这是我的情况,希望你能帮我解决 我有一个名为“MainForm”的MDI容器表单。在MainForm中有一个简单的表单名为“Form1”。在表格1中有一个按钮。每次你按下它,它就会打开一个新的表单,其中包含“Form2”的实例。下面的代码是单击按钮事件 Button_Click() { Form2 frm=new Form2(); frm.mdiparnt=this.MdiParent; this.addOwnedForm(frm); frm.Visible=true;

这是我的情况,希望你能帮我解决

我有一个名为“MainForm”的MDI容器表单。在MainForm中有一个简单的表单名为“Form1”。在表格1中有一个按钮。每次你按下它,它就会打开一个新的表单,其中包含“Form2”的实例。下面的代码是单击按钮事件

Button_Click()
{
   Form2 frm=new Form2();
   frm.mdiparnt=this.MdiParent;
   this.addOwnedForm(frm);
   frm.Visible=true;
}
当用户关闭Form1时,下面的代码尝试关闭所拥有的表单

Form1_CloseEvent()
{
   foreach(var item in this.ownedForm)
   {
      item.close();
   }
}

但当调试器进入关闭事件时,只需关闭Form1,form2实例将保持打开状态。我该怎么办才能解决这个问题呢?

我想你不是在策划这个活动。像这样做

将其添加到您的
按钮\u Click()
方法:

this.FormClosed += Form1_FormClosed;
方法如下:

void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    foreach(var item in this.ownedForm)
    {
        item.close();
    }
}

首先,这段代码没有编译

您有几个语法错误:
mdiparnt
addOwnedForm
ownedForm
close

您可能没有共享您的实际代码,如果这不是您的代码,那么这将是一个帮助您的问题

现在在
按钮中单击()
您正在执行的事件

frm.mdiparnt=this.MdiParent;
this.AddOwnedForm(frm);
即使你只需要

this.AddOwnedForm(frm);

否则将引发异常。我已经检查了这段代码,它工作正常

Form1\u CloseEvent()方法在哪里存在?Form2不能既是MdiChild又是Form1的所有者,因为MainForm已经是所有者。这段代码是如何运行而不被执行的?。。。