![]() |
1
10
只需使用从TableLayoutPanel继承的自定义控件,并将DoubleBuffered属性设置为true,效果很好…尤其是在动态添加或删除行时。
|
![]() |
2
4
我对TableLayout也有类似的问题。如果我使用 tablelayout.controls.clear()。 方法,子控件从未被释放,但当我简单地丢弃TableLayout而不清除它时,泄漏停止。回想起来,我用清晰的方法 防止 某种泄漏。 显然,clear方法不会显式地释放控件(这是有意义的,因为从TableLayout中删除控件并不意味着已经完成了这些操作),并且从TableLayout中删除子控件会阻止清理例程在释放LayoutTable本身时释放子控件(它只是已经不知道了)。 我的建议:删除 detailTable.controls.clear(); 行,从父级的 控制 收集并处理它,然后为下一轮创建一个全新的TableLayout。同时完全失去DisposeAndClearControls方法,因为您不需要它。以我的经验来看,它工作得很好。 这样,您就不必再回收整个用户控件,而只需要内部的TableLayout。 |
![]() |
3
1
我更改了包含表单,以便在每次选择更改时构造用户控件的新版本。它处理旧的,建造新的。这似乎表现得很好。出于性能方面的考虑,我最初只使用了一个。显然,这并不能提高性能。如果我处理旧的并创建新的,性能就不是问题了。 不幸的是,tablelayoutpanel像那样泄漏。 |
![]() |
4
0
不幸的是,我能提供的唯一建议就是亲自处理你的控制装置。根据我的经验,.NET TableLayoutPanel虽然非常有用,但它正在泄漏一些东西,并且随着它的增长而变得非常缓慢(而且它也不需要不合理的单元格数来达到这一点)。这种行为也可以在设计器中看到。 |
![]() |
5
0
tablelayoutpanel.controls.clear()对我来说很好,可能是因为我从不同的选项卡中清除了它。 |
![]() |
6
0
|
![]() |
7
0
我也遇到了同样的问题,找到了一个不改变太多的好方法: 在VB.net
或在C中:
|