我们从 1 年开始将 VirtualTreeView v5.5.3 与 Delphi7 一起使用,并且喜欢它!
我们希望充分发挥组件的潜力,但帮助文件中只有少量关于BeginSynch
方法的信息。
与BeginUpdate + EndUpdate
相比,什么时候应该使用BeginSynch + EndSynch
?
哪一个应该嵌套到另一个中?
在哪种情况下可以使用什么方法?(Sort
,ScrollIntoView
,MoveTo
,NodeHeight
,isVisible[]
, ...在绘画之前对操作进行分组以加快应用程序的速度?
据我了解,它们具有不同的,几乎相反的目的,对于您的用例,您需要BeginUpdate
。
当您想要进行大量更新并且不希望在此过程中发生重绘等时,通常会调用BeginUpdate
。许多控件,包括TListBox和TDBGrid,都有这种可能性来加速批量更新。
BeginSynch
与事件相关,尤其是 OnChange 事件。当您将ChangeDelay
属性设置为大于 0 的值时,虚拟树视图可能会触发OnChange
事件并带有一些延迟。 这也意味着您可能会错过一些活动。如果快速连续进行两次更改,则可能只获得一个事件,或者可能会比预期晚获得事件。 BeginSynch 将启动一个同步模式,该模式在进行更改后立即触发 OnChange 事件(与更改同步(,覆盖 ChangeDelay 属性。启动此同步模式比保存 ChangeDelay 属性的值并在之后还原它更容易。
因此,在某种程度上,您可以说BeginUpdate和BeginSync在速度方面几乎是相反的,但实际上这只是关于您的用例。对于您的情况("分组操作"(,您肯定会使用BeginUpdate
.
在这方面,BeginSynch上的文档可以更清楚一些。它指的是BeginUpdate,因为它是一种类似的机制(进入某种更新模式,具有相关的EndSomething方法(,而实际上它应该指的是功能上与之相关的ChangeDelay。有趣的是,文档底部的"发送反馈"链接实际上并不是一个链接......