这真的很简单。
我有一个 TableLayoutPanel,它基于数据库查询填充了控件(只是标签、按钮和一些带有按钮的面板)。当需要刷新数据时,我使用 TableLayoutPanel.Controls.Clear()。不幸的是,这是一个非常缓慢的操作。我希望它比填充表格的代码快,但它至少慢 3 或 4 倍。
我明确地证明了缓慢是在执行 Controls.Clear() 时,通过在显示消息框后将其作为对 TableLayoutPanel 完成的单一操作执行(然后过程返回)。控件从下往上明显消失。当使用记录集重新填充 TableLayoutPanel 时,控件从上到下出现的速度几乎比我看到的要快。
我已经在做 TableLayoutPanel.SuspendLayout() 和 ResumeLayout()。
在表单上使用this.DoubleBuffered = true
似乎没有任何作用。
我可以只处理整个控件并通过代码重新创建它,但这是一个很大的痛苦,并且使拥有一个漂亮的表单设计器 GUI 毫无意义。我必须深入研究我在控件上设置的每个属性并为其创建一行代码(尽管我想我可以从设计器代码本身中得到它,但它仍然感觉不对)。
关于如何更快地完成工作的任何想法?我什至愿意使用除 TableLayoutPanel 之外的其他方法......我只需要自由地在每个单元格中放置多个按钮,或者禁止它能够跨越表格标题中的列。
C# 至少可以在重绘时冻结整个表单,然后一次全部绘制吗?