我什么时候应该使用 VirtualTree 的 BeginSynch 与 BeginUpdate?

When should I use VirtualTree's BeginSynch vs BeginUpdate?

我们从 1 年开始就在 Delphi7 中使用 VirtualTreeView v5.5.3 并且非常喜欢它!

我们想充分发挥组件的潜力,但帮助文件中关于 BeginSynch 方法的信息很少。

BeginUpdate + EndUpdate相比,什么时候应该使用BeginSynch + EndSynch

哪个应该嵌套到另一个?

在什么情况下可以使用什么方法? (SortScrollIntoViewMoveToNodeHeightisVisible[]、...)在绘画之前对操作进行分组以加速应用程序?

据我了解,它们有不同的、几乎相反的目的,对于您的用例,您需要 BeginUpdate.

BeginUpdate 通常在您想要执行 lot 更新时调用,并且您不希望在该过程中发生重绘等。许多控件,包括 TListBox 和 TDBGrid,都有可能加快批量更新。

BeginSynch is related to events, especially the OnChange event. The VirtualTreeView can fire the OnChange event with some delay when you set the ChangeDelay 属性 为大于 0 的值。 这也意味着您可能会错过一些活动。如果您快速连续地进行两项更改,您可能只会获得一个事件,或者您可能会比预期晚获得该事件。 BeginSynch 将启动一个同步模式,该模式在进行更改后立即(同步)触发 OnChange 事件,覆盖 ChangeDelay 属性。启动此同步模式比保存 ChangeDelay 属性 的值并在之后恢复它更容易。

所以在某种程度上,您可以说 BeginUpdate 和 BeginSync 在速度方面几乎彼此相反,但实际上这只是关于您的用例。对于您的情况 ("grouping manipulations"),您肯定会使用 BeginUpdate.

BeginSynch 的文档在这方面可能更清楚一些。它指的是 BeginUpdate,因为它是一种类似的机制(进入某种更新模式,具有相关的 EndSomething 方法),而实际上它应该指的是它在功能上相关的 ChangeDelay。同样有趣的是,文档底部的 'Send feedback' link 实际上并不是 link...