delphi中为什么有多个BeginUpdate

fisea 2008-07-17 09:56:17
我选中这个方法BeginUpdate,然后按下F1,获得帮助。为什么有哪么多个BeginUpdate方法。请大侠指点。谢谢、
...全文
597 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon_17 2011-12-22
  • 打赏
  • 举报
回复
很好 阿伯的回答!!
sharebei 2011-11-28
  • 打赏
  • 举报
回复
学习了,++
火龙岛主 2008-07-18
  • 打赏
  • 举报
回复
简单的说就是提高效率,减少因为update和change造成的闪烁等类似的现象,
你可以理解成一把锁的两个动作。
liangpei2008 2008-07-18
  • 打赏
  • 举报
回复
阿发伯解释得相当清楚了!
阿发伯 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fisea 的回复:]
Items.BeginUpdate是什么意思?items是一个属性。是不是很多属性也实现了这个方法????请大侠指点。谢谢!
[/Quote]

[Quote=引用 5 楼 fisea 的回复:]
引用 3 楼 ldj_84 的回复:
对于不类型的BeginUpdate方法有所不同

类继承了同一个方法,含义不一样吗?
[/Quote]

很多类中都有BeginUpdate过程,不过只是名称相同而已,彼此并无任何联系。不管方法有何不同,有2点是相同的:1是BeginUpdate必须同EndUpdate配对使用;2是BuginUpdate是解决比较复杂的赋值或过程调用。何谓“复杂的赋值或过程调用”?比如对类的某属性赋值或者调用某个过程后,往往调用该类的Change或者Uodate过程,这就引起类本身以及拥有该类的类产生一系列动作,如前面所说的ListBox.Item.Add过程('') 势必引起Item和ListBox产生连锁反应,如果这种产生反应的多个过程或属性在一起动作,比如某些类的Assign过程,势必在同一时刻产生多个相同Change或Update,因此,调用BeginUpdata,增加某个引用计数,在所有过程调用或属性赋值结束后,再调用EndUpdate,减少引用计数,只有引用计数为0时,才开始一次性地Change或Update。
fisea 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ldj_84 的回复:]
对于不类型的BeginUpdate方法有所不同
[/Quote]
类继承了同一个方法,含义不一样吗?
fisea 2008-07-17
  • 打赏
  • 举报
回复
Items.BeginUpdate是什么意思?items是一个属性。是不是很多属性也实现了这个方法????请大侠指点。谢谢!
云海ldj 2008-07-17
  • 打赏
  • 举报
回复
对于不类型的BeginUpdate方法有所不同
云海ldj 2008-07-17
  • 打赏
  • 举报
回复
在对ListBox.Item.Add('')操作时
如果数据量大时,就要
ListBox.Item.BeginUpdate;
ListBox.Item.Add('')
..
ListBox.Item.EndUpdate;
这个时候速度会快很多,这跟Add方法有关,细节可以去看看Add这个方法的实现过程.
JeffChung 2008-07-17
  • 打赏
  • 举报
回复
因为不同的类都有些实现了BeginUpdate这个方法的
你只要找到你需要的那个类的就好了

或者你直接在帮助里搜索那个类,再找BeginUpdate来看

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧