这真的很简单。

我有一个 TableLayoutPanel,它填充了基于数据库查询的控件(只有标签、按钮和一些带有按钮的面板)。当数据需要刷新时,我使用 TableLayoutPanel.Controls.Clear()。不幸的是,这是一个非常缓慢的操作。我希望它比填充表格的代码快,但至少慢 3 到 4 倍。

我通过在显示消息框(然后过程返回)后将其作为对 TableLayoutPanel 执行的单一操作来明确地证明了执行 Controls.Clear() 时的缓慢。控件从下往上明显消失。当记录集用于重新填充 TableLayoutPanel 时,控件从上到下出现的速度几乎比我看到的要快。

我已经在做 TableLayoutPanel.SuspendLayout() 和 ResumeLayout()。

在表单上使用 this.DoubleBuffered = true 似乎没有任何作用。

我可以只处理整个控件并通过代码重新创建它,但这是一个很大的痛苦,并且使拥有一个漂亮的表单设计器 GUI 毫无意义。我将不得不深入研究我在控件上设置的每个属性并为其创建一行代码(虽然我想我可以从设计器代码本身中得到它,但它仍然感觉是错误的)。

关于如何更快地完成工作的任何想法?除了 TableLayoutPanel 之外,我什至愿意使用其他方法......我只需要自由地为每个单元格放置多个按钮,或者禁止它能够跨越表格标题中的列。

C# 至少可以在重绘时卡住整个表单,然后一次全部绘制吗?

最佳答案

我也遇到了使用 TableLayoutPanels 速度慢的问题。我发现的最佳解决方案不是在表单上设置 DoubleBuffered 属性,而是创建一个继承自 TableLayoutPanel 的新类,并在该类的构造函数中启用双缓冲:

public class DoubleBufferedTableLayoutPanel : TableLayoutPanel
{
    public DoubleBufferedTableLayoutPanel()
    {
        DoubleBuffered = true;
    }
}

然后,在通常使用 TableLayoutPanel 的地方使用 DoubleBufferedTableLayoutPanel。

关于c# - .Net TableLayoutPanel – 清除控件非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3339300/

10-13 08:13
查看更多