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