我有一个树视图,其中已经填充了来自另一个程序的文件/文件夹。我想逐个遍历树视图中的项目,从上到下按精确的顺序进行。但是,与普通列表不同,我不能仅使用简单的for
语句来实现此目的。我必须进入每个节点,等等
我该怎么做?我希望有一种方法,我可以做到这一点,而无需运行递归过程。当我迭代这些项时,我不必关心当前焦点的父节点或子节点。我只需要能够在传递每个节点时读取它们的Data
属性,并在遍历树视图时突出显示当前节点。对于这个树视图中的每一项,我都将执行一些工作,并希望在此过程中向用户直观地显示当前选择的是哪一项。
3条答案
按热度按时间ou6hu8tu1#
实际上,你可以使用
for
循环。这是语法糖:
在可读性方面,我推荐
for/in
循环。在不支持节点迭代器的旧版本中,您可能更喜欢使用
while
循环来实现。我想还有别的办法。我只知道这些!
LU RD进行了有趣的观察,documentation声明:
按索引访问树视图项可能会耗费大量时间,尤其是当树视图包含许多项时。为了获得最佳性能,请尝试设计应用程序,使其对树视图的项索引的依赖性尽可能少。
这是非常正确的。对于随机访问,代码必须从根开始遍历树,直到找到第i个节点。
然而,存在用于顺序访问的优化。Delphi树视图 Package 器记住索引所定位的最后一个节点的索引。下次请求索引与缓存节点相差不超过1的节点时,可以快速返回所需的节点。这是在
TTreeNodes.GetNodeFromIndex
中实现的。ugmeyewa2#
toe950273#
在我自己寻找用TListView中的项目填充ComboBoxEx的方法之后,为了能够过滤数据,我做了递归函数,它迭代所有的ListView数据。这不是100%的答案,但它可能是有用的。