2009-07-13 22 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 }); 
} 
関連する問題