如何在TFileListBox列表中的内容发生变化时得到通知?(100分)

  • 主题发起人 主题发起人 nibble
  • 开始时间 开始时间
N

nibble

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在TFileListBox列表中的内容发生变化时得到通知,执行某些代码。我研究了OnChange
事件,发现它不仅在列表内容发生变化时,而且在ItemIndex变化时都会触发该事件,所以
不合我的要求。不知道有没有其它事件可以实现我的要求。
 
每次变化后保存一个Items的副本,在下次再改变时,比较副本与Items的差异,如果仅仅
是ItemIndex变化,而内容无变化时则什么都不做就是了.当然第一次这个副本为空.
比较二个TStrings的内容除了顺序之外其他是否相同,这个先比较Count,然后遍历
其中一个,看看在另一个TStrings是否存在同样的项就行了.
 
to lynu:
这样效率比较低吧,我的FileListBox里面有几千个文件项,每次都要这么比较不是很慢。
 
速度却也不会很慢,毕竟TStrings是在内存中操作.
至于效能,我想这个副本可能要占一点点内存吧.
我也想不出还有什么其他的好办法
 
那你在 OnChange 中过滤掉 ItemIndex 的变化影响不就可以了
用一个 OldIndex 始终储存前一次 ItemIndex 的值,当进入了
OnChange 中时:

if OldIndex <> ItemIndex then
begin
OldIndex := ItemIndex;
Exit;
end;
// 到这里,ItemIndex 变化的因素就排除了
 
后退
顶部