4 Stimmen

Über PropertyStore und MDI-Child-Formular

Dies ist eine .NET WinForm-Frage zur MDI-Einstellung.

Wenn das Hauptformular ein MDI-Child-Formular erstellt, hält das PropertyStore des Hauptformulars eine Referenz auf das MDI-Child-Formular. Ich frage mich, ob dies dazu führen wird, dass das Child-Formular auch dann noch aktiv ist, wenn es geschlossen wurde. Wenn ja, was soll ich tun, wenn ich das Child-Formular entsorge, um diese Referenz zu entfernen?

Das Child-Formular wird durch den Beispielcode aufgerufen:

//Der Code befindet sich im Hauptformular.
var f = new FormMDIChild();
f.MdiParent = this;
f.Show();

8voto

Jeremy Jarrell Punkte 651

Zur Information, die Lösung, die im verlinkten Beitrag angeboten wird, funktioniert tatsächlich (obwohl sie ein wenig riskant ist). Allerdings verschwindet das Leak auch, wenn Sie ein anderes Child-Formular öffnen und schließen. Es scheint, dass das MDI-Elternteil nur das zuletzt geöffnete Child-Formular enthält.

Wenn Sie das Leak durch Verwendung des in dem verlinkten Beitrag erwähnten Workarounds beheben möchten, überschreiben Sie einfach die Methode OnMdiChildActivate des MDI-Elternteils...

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

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

2voto

dnatoli Punkte 6872

Ich habe ein ähnliches Problem. Ich habe diesen Forenbeitrag gefunden, der das Problem diskutiert und eine Lösung vorschlägt. Ich bin mir jedoch nicht sicher, ob diese Eigenschaft in den neuesten Service Packs entfernt wurde, da ich die Eigenschaft mit Reflektion nicht finden kann und die Lösung daher nicht für mich funktioniert. Ich werde weiter suchen und dich wissen lassen, wenn ich eine andere Lösung finde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X