2011-01-23 39 views
3

如何在FlowLayoutPanel中正確地處理用戶控件?正確地從FlowLayoutPanel中刪除控件

請問flowlayoutpanel1.Controls.RemoveAt(i)夠了嗎?

我只是找不到一個flowlayoutpanel1.Controls .Dispose()...

+0

Windows窗體我承擔所有的控制? – 2011-01-23 16:01:36

回答

1

你想出售的FlowLayoutPanel或全部所有的控制?如果你想處置所有這些,只需處理FlowLayoutPanel。處置控件也會將Controls中的所有內容都放置在Controls集合中。如果您想要處置單個控件,請調用該控件的Dispose方法; FlowLayoutPanel會自動將其從Controls集合中刪除。

如果你想處理所有的控件,但不是FlowLayoutPanel本身,這有點棘手。您不能僅通過Controls集合進行foreach並處理每個控件,因爲這會導致Controls集合被修改。相反,您可以將Controls集合複製到一個單獨的列表中並從那裏處置它們。

+0

我需要處置一個控件(第一個) – Alex 2011-01-24 00:56:25

+0

沒有評論downvote? – 2016-05-27 02:32:38

0

如果控件有Dispose()方法,在從面板中刪除它之後調用它。

2

如果您希望刪除所有控件,則可以向後遍歷控件集合,而不是創建副本(請參見下文)。

我發現這提供了最好的解決方案,特別是如果您打算在之後重新填充它。強制GC收集有助於在檢查存在大量控件的情況下保持內存使用。

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(); 
+0

請解釋你的代碼,或者至少添加註釋行。 – Amith 2013-10-25 10:53:23

1

YourFlowLayoutPanel.Controls.Clear(); 工作時,我需要刪除控件集合

相關問題