处置父母时如何避免子表单处理?
我有纤维束构成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