如何在FlowLayoutPanel中正確地處理用戶控件?正確地從FlowLayoutPanel中刪除控件
請問flowlayoutpanel1.Controls.RemoveAt(i)
夠了嗎?
我只是找不到一個flowlayoutpanel1.Controls
.Dispose()...
如何在FlowLayoutPanel中正確地處理用戶控件?正確地從FlowLayoutPanel中刪除控件
請問flowlayoutpanel1.Controls.RemoveAt(i)
夠了嗎?
我只是找不到一個flowlayoutpanel1.Controls
.Dispose()...
你想出售的FlowLayoutPanel
或全部所有的控制?如果你想處置所有這些,只需處理FlowLayoutPanel
。處置控件也會將Controls中的所有內容都放置在Controls集合中。如果您想要處置單個控件,請調用該控件的Dispose方法; FlowLayoutPanel
會自動將其從Controls集合中刪除。
如果你想處理所有的控件,但不是FlowLayoutPanel
本身,這有點棘手。您不能僅通過Controls集合進行foreach並處理每個控件,因爲這會導致Controls集合被修改。相反,您可以將Controls集合複製到一個單獨的列表中並從那裏處置它們。
我需要處置一個控件(第一個) – Alex 2011-01-24 00:56:25
沒有評論downvote? – 2016-05-27 02:32:38
如果控件有Dispose()
方法,在從面板中刪除它之後調用它。
如果您希望刪除所有控件,則可以向後遍歷控件集合,而不是創建副本(請參見下文)。
我發現這提供了最好的解決方案,特別是如果您打算在之後重新填充它。強制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();
請解釋你的代碼,或者至少添加註釋行。 – Amith 2013-10-25 10:53:23
YourFlowLayoutPanel.Controls.Clear();
工作時,我需要刪除控件集合
Windows窗體我承擔所有的控制? – 2011-01-23 16:01:36