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

时间:2019-09-04 04:21:56

标签: delphi virtualtreeview

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

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

BeginSynch + EndSynch相比,BeginUpdate + EndUpdate应该何时使用?

哪个应该嵌套到另一个?

在这种情况下可以使用哪些方法? (SortScrollIntoViewMoveToNodeHeightisVisible[],...)在绘画之前将操作分组以加快应用程序的速度?

1 个答案:

答案 0 :(得分:9)

据我所知,它们有不同的,几乎相反的目的,并且对于您的用例,您将需要BeginUpdate

BeginUpdate通常在您要进行很多更新,而又不想在此过程中进行重绘等时调用。许多控件(包括TListBox和TDBGrid)都具有加快批量更新的可能性。

BeginSynch与事件有关,尤其是OnChange事件。当您将ChangeDelay属性设置为大于0的值时,VirtualTreeView可以延迟一段时间触发OnChange事件。 这也意味着您可能会错过一些事件。如果快速连续进行两次更改,则可能只会收到一个事件,或者可能会比预期的晚。 BeginSynch将启动一个同步模式,该模式将在进行更改之后(与之同步)立即触发OnChange事件,并覆盖ChangeDelay属性。与保存ChangeDelay属性的值然后再还原它相比,启动此同步模式要容易得多。

从某种意义上讲,就速度而言,您可以说BeginUpdate和BeginSync几乎是彼此相反的,但实际上这只是您的用例。对于您的情况(“分组操作”),您肯定会使用BeginUpdate

在这方面,BeginSynch上的文档可能会更清楚。之所以引用BeginUpdate,是因为它是一种类似的机制(使用某种关联的EndSomething方法输入某种更新模式),而实际上它应该引用的是与功能相关的ChangeDelay。有趣的是,文档底部的“发送反馈”链接实际上并不是链接...