这是关于MDI设置的.net WinForm问题。
当主窗体创建MDI子窗体时,主窗体PropertyStore
包含对MDI子窗体的引用。我想知道这是否会导致儿童形态即使关闭也会存活。如果是这样,处理子表格时我该怎么办才能删除此引用?
通过示例代码调用子表单:
//The code is in the main form.
var f = new FormMDIChild();
f.MdiParent = this;
f.Show();
答案 0 :(得分:7)
为了记录,参考帖子中提供的解决方案确实有效(尽管它有点冒险)。但是,如果打开和关闭另一个子窗体,泄漏也会消失,看起来MDI Parent只会泄漏最后打开的子窗口。
如果您想通过使用引用帖子中提到的解决方法来修复泄漏,只需覆盖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 });
}
答案 1 :(得分:2)
我遇到了类似的问题。我发现这个forum post讨论了这个问题并建议了一个解决方案但是我不确定这个属性是否已经在最近的服务包中删除了,因为我似乎无法使用反射找到该属性,因此解决方案无效为了我。如果我找到另一种解决方案,我会一直四处看看并告诉你。