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
...
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
...
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();
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.
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.