Ordnungsgemäße Entsorgung/schließen eines Benutzers-Kontrolle
Ich habe ein Windows-Form-Bildschirm mit einer Menüleiste angedockt an der linken Seite auf das Formular, ähnlich dem von Outlook 2003, und ein panel unter den rest der rechten Seite des Formulars.
Meine Links im Menü Elemente enthält.
Bei Klick auf diesen Artikel, möchte ich laden Sie das entsprechende Benutzer-Steuerelement (in der Funktion als "sub-forms") auf der rechten Seite.
Ich habe es geschafft, zu tun, und es funktioniert gut.
Den Kummer, den ich habe ist aber, ob oder nicht meine Benutzersteuerelemente werden entsorgt oder, wenn Sie bleiben auf den Speicher, wenn der Benutzer klickt auf einen anderen Menüpunkt (und als solche lädt eine andere usercontrol - /Unterformular).
Der code ähnlich wie diese:
private void ultraExplorerBar1_ItemClick(object sender, Infragistics.Win.UltraWinExplorerBar.ItemEventArgs e)
{
panel1.Controls.Clear();
if (e.Item.Key == "Action")
{
ActionUserControl subForm = new ActionUserControl();
panel1.Controls.Add(subForm);
subForm.Show();
}
else if (e.Item.Key == "Options")
{
OptionsUserControl subForm = new OptionsUserControl();
panel1.Controls.Add(subForm);
subForm.Show();
}
}
Ich bin nicht sicher, ob das panel1.Controls.Clear () - ich Ruf zu Beginn der Methode wird genug für die Benutzersteuerelemente nicht mehr verwendet werden garbage collected in due-Zeit?
Meinem Verständnis, sollte es keine Referenz Links, um Sie in die Anwendung einmal gelöscht von der Platte, aber ich bin nicht sicher, ob ich sollte etwas anderes tun oder ein halbwegs leichtes Werkzeug, das ich verwenden könnte, um zu bestätigen, dass meine Unterformulare angeordnet sind, wie Sie sollten und, dass es nicht zu einer Art Speicher - /Ressourcen-Leck?
panel1.Controls.clear();
Es ist nicht, Sie zu entsorgen Sie die Steuerelemente im panel explizit. while (panel1.Controls.Count > 0) panel1.Controls[0].Dispose();
InformationsquelleAutor Kharlos Dominguez | 2011-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie diese Schleife vor dem Aufruf
panel1.Controls.Clear()
und sicher sein, dass dieDispose()
Methode in der Benutzer-Steuerelemente werden wiederum der Entsorgung von jedem Einweg-Ressourcen.Es ist eine alte post und in VB.NET aber das legt sich die Dinge ziemlich sauber in Bezug auf die Entsorgung standard-WinForms-Steuerelemente. vbinfozine.com/a_disposable_comp.shtml
InformationsquelleAutor harlam357
Einer for each-Schleife wird den job nicht machen. Da nach jeder Entsorgung die Elemente und Indizes sind geändert.
Brauchen Sie eine while-Schleife Entsorgung die meisten top-Kontrolle jedes mal.
In der folgende code, die ich benutze, habe ich ein panel mit dem Benutzer steuert.
Ich gehe in die erste Kontrolle und entsorgen Ihre Kontrollen dann entsorgen Sie das Steuerelement selbst.
Nach der Entsorgung der alle Steuerelemente, die trigger eine klar auf den index zurücksetzen.
InformationsquelleAutor Hussam Kazah
Ich dies tun genug mit dynamischen Inhalten, die ich Hinzugefügt haben, können Sie diese Methode, um meine Basis-Seite-Klasse:
Es ist rekursiv zu. Und dann nennen Sie es wie so (wenn Sie nicht selbst die Kontrolle selbst):
oder
InformationsquelleAutor n8wrl