2009-07-13 200 views
3

这是.net WinForm有关MDI设置的问题。关于PropertyStore和MDI子窗体

当主窗体创建一个MDI子窗体时,主窗体的PropertyStore持有对MDI子窗体的引用。我想知道这是否会导致儿童表格即使关闭也仍然存在。如果是这样,那么在处理子表单以便删除这个引用时我该做什么?

子窗体由示例代码调用:

//The code is in the main form. 
var f = new FormMDIChild(); 
f.MdiParent = this; 
f.Show(); 

回答

2

我有一个类似的问题。我发现这forum post讨论这个问题,并建议一个解决方案,但我不知道这个属性已被删除在最近的服务包,因为我似乎无法找到该属性使用反射,因此该解决方案不适合我。如果我找到其他解决方案,我会继续环顾四周,并让您知道。

7

为了记录,在参考文章中提供的解决方案确实有效(虽然它有点冒险)。但是,如果您打开和关闭另一个子窗体,泄漏也会消失,似乎MDI父窗体只泄漏最后打开的子窗体。

如果你想通过使用引用后围绕提到的工作,以修复泄漏,只是覆盖的MdiParent的OnMdiChildActivate方法...

protected override void OnMdiChildActivate(EventArgs e) 
{ 
    base.OnMdiChildActivate(e); 

    typeof(Form).InvokeMember("FormerlyActiveMdiChild", 
     BindingFlags.Instance | BindingFlags.SetProperty | 
     BindingFlags.NonPublic, null, this, new object[] { null }); 
}