0

我有两个表单Form1和Form2,这是创建form1后创建form2的代码

F2=new Form2();
F2.Dock = DockStyle.Fill;
F2.TopLevel = false;
F2.Parent = F1;//setting the parent of form1 to be form1

另外,我希望在我的应用程序中只有一个 Form2 对象,但父级发生了变化,因此 F1 可以被释放并将 F2 父级设置为 Form1 类型的其他对象。现在当我处置F1时,处置F2时如何避免处置F1时处置F2?有没有办法从孩子那里得到 onparentdispose 事件然后改变它的父母呢? 在此处输入图像描述

编辑:

我只想要每个红色表格的绿色表格,但蓝色表格的布局会发生变化,因此它会被处理掉

4

2 回答 2

1

您可以使用全局静态变量来指向 Form2 的实例。例如:

public class Globals
{
    public static Form2 form2;
}

当您创建 Form2 对象时,将其分配给 Globals.Form2 变量。

F2=new Form2();
F2.Dock = DockStyle.Fill;
F2.TopLevel = false;
F2.Parent = F1;//setting the parent of form1 to be form1
Globals.form2 = F2; // Save it to an global variable

然后,在您的 Form1 的 FormClosing 事件处理程序中,将 Gloabls.Form2.Parent 属性设置为另一个表单对象(例如您的主表单)或 null。这样,当 Form1 被释放时,您的 Form2 对象将保持活动状态。

于 2012-10-11T10:19:14.703 回答
1

您可以在事件中获取 F1 的子表单FormClosing并将其父表单设置为另一个表单:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    foreach (Form frm in this.Controls.OfType<Form>())
    {
        frm.Parent = Application.OpenForms.OfType<Form1>().First(f => f.Tag == "Foo");
    }
}

更改.First(f => f.Tag == "Foo")为查找另一个 F1 实例的所需方式!

于 2012-10-11T12:25:42.807 回答