2009-07-13 106 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 }); 
}