gpt4 book ai didi

c# - .Net TableLayoutPanel – 清除控件非常慢

转载 作者:太空狗 更新时间:2023-10-29 19:59:05 24 4
gpt4 key购买 nike

这真的很简单。

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com