处置父母时如何避免子表单处理?

我有纤维束构成Form 1和Form,这是创建窗体2的代码创建Form1中处置父母时如何避免子表单处理?

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事件,然后改变它的父母呢?

编辑:

我想每各红色形式只有绿色的形式,但蓝色的形式改变的布局,因此它得到安置

回答:

你可以得到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的另一个实例的方式!

回答:

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

public class Globals 

{

public static Form2 form2;

}

某处当您创建Form2对象时,将其分配给Globals.Form2 variabe。

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属性设置为另一种形式的对象(例如,您的主要形式)或空。通过这种方式,当处理Form1时,Form2对象将保持活动状态。

以上是 处置父母时如何避免子表单处理? 的全部内容, 来源链接: utcz.com/qa/257687.html

回到顶部