我有两个表单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事件然后更改其父母呢?
修改
我希望每个红色表单只有绿色表单,但蓝色表单的布局会发生变化,因此会被处理
答案 0 :(得分: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对象将在处理Form1时保持活动状态。
答案 1 :(得分:1)
您可以在FormClosing
事件中获取F1的子表单,并将其父级设置为另一个表单:
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实例的理想方式!