這非常簡單。.Net TableLayoutPanel - 清除控件非常慢
我有一個基於數據庫查詢填充了控件(只是標籤,按鈕,和一些面板的按鈕)的TableLayoutPanel。當數據需要刷新時,我使用TableLayoutPanel.Controls.Clear()。不幸的是,這是一個非常緩慢的操作。我希望它比填充表格的代碼快,但速度至少要慢3到4倍。
我明確證明,執行Controls.Clear()時,執行此操作時,會顯示一個消息框(然後過程返回),以此作爲單個事件對TableLayoutPanel執行操作。控件明顯從底部消失。當記錄集用於重新填充TableLayoutPanel時,從上到下顯示的控件的速度幾乎快於我看到的速度。
我已經在做TableLayoutPanel.SuspendLayout()和ResumeLayout()。
在窗體上使用this.DoubleBuffered = true
似乎沒有做任何事情。
我可以放棄整個控件並通過代碼重新創建它,但這是一個很大的痛苦,並且使得一個漂亮的表單設計器GUI沒有意義。我將不得不深入挖掘每一個我在控件上設置的屬性,併爲它創建一行代碼(儘管我想我可以從設計器代碼本身中獲得它,但仍然感覺錯誤)。
關於如何更快地完成這項工作的任何想法?我甚至可以使用除TableLayoutPanel之外的其他方法...我只需要在每個單元格中放置多個按鈕的自由度,或者限制它可以跨越表格標題中的列。
C#至少可以凍結整個表單並重繪,然後一次全部繪製完成?
您提到TableLayoutPanel和FlowLayoutPanel。 – 2010-07-26 22:07:06
你運行一個分析器來證明它確切的那一行代碼?這行代碼是否可能會導致副作用?被稱爲控件的事件被隱藏起來或類似的東西? – WillfulWizard 2010-07-26 22:21:17
@Willfulwizard我更新了我的帖子,之所以我認爲這是需要很長時間的Controls.Clear()。 – ErikE 2010-07-27 00:50:32