3 Stimmen

Korrektes Entfernen des Steuerelements aus FlowLayoutPanel

Wie kann ich ein Benutzersteuerelement in einem FlowLayoutPanel korrekt entsorgen?

Hat flowlayoutpanel1.Controls.RemoveAt(i) ausreichen?

Ich kann einfach kein .Dispose() für flowlayoutpanel1.Controls ...

2voto

richardwvm Punkte 69

Wenn Sie alle Steuerelemente entfernen möchten, können Sie die Steuerelementsammlung rückwärts durchlaufen, anstatt eine Kopie zu erstellen (siehe unten).

Ich habe festgestellt, dass dies die beste Lösung ist, vor allem, wenn Sie beabsichtigen, sie anschließend neu zu bevölkern. Erzwingen GC zu sammeln hilft halten Speicherverbrauch in Schach, wo es eine große Anzahl von Kontrollen.

FlowLayoutPanel.SuspendLayout();

if (FlowLayoutPanel.Controls.Count > 0) {
    for (int i = (FlowLayoutPanel.Controls.Count - 1); i >= 0; i--) {
        Control c = FlowLayoutPanel.Controls[i];
        c.SomeEvent -= SomeEvent_Handler;
        c.Dispose();
    }
    GC.Collect();
}

FlowLayoutPanel.ResumeLayout();

1voto

Kevin Kibler Punkte 12917

Möchten Sie alle Steuerelemente in der FlowLayoutPanel oder alle? Wenn Sie sie alle entsorgen wollen, entsorgen Sie einfach die FlowLayoutPanel . Wenn Sie ein Steuerelement entsorgen, wird auch alles in der Controls-Sammlung entsorgt. Wenn Sie ein einzelnes Steuerelement entsorgen möchten, rufen Sie die Dispose-Methode dieses Steuerelements auf; die FlowLayoutPanel automatisch aus der Sammlung "Controls" entfernt.

Wenn Sie alle Steuerelemente entsorgen wollen, aber nicht die FlowLayoutPanel selbst, ist es etwas schwieriger. Sie können nicht einfach die Controls-Auflistung durchforsten und jedes Steuerelement entsorgen, da dies eine Änderung der Controls-Auflistung zur Folge hätte. Stattdessen können Sie die Controls-Auflistung in eine separate Liste kopieren und sie von dort aus entsorgen.

0 Stimmen

Ich muss nur ein Steuerelement entsorgen (das erste)

0voto

Wenn die Kontrolle Dispose() Methode erst nach dem Entfernen aus dem Panel aufrufen.

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