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?

Versuchen Sie den Aufruf in der Schleife 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

Schreibe einen Kommentar