delphi – 通过树视图中的节点递归迭代?
我有一个树视图,已经填充了另一个过程中的文件/文件夹.我想逐个遍历树视图中的项目,按照从上到下的确切顺序进行迭代.但是,与普通列表不同,我不能只使用一个简单的for语句.我必须进入每个节点等
我该怎么做呢?我希望有一种方法可以在不运行递归程序的情况下完成.当我遍历这些项目时,我不一定关心当前聚焦的父节点或子节点.我只需要能够在传递它们时读取每个节点的Data属性,并在我浏览时突出显示树视图中的当前节点.对于此树视图中的每个项目,我将执行一些工作,并希望在此过程中直观地向用户显示当前选择的项目. 解决方法
实际上你可以使用for循环.
var Node: TTreeNode; .... for Node in TreeView.Items do DoSomething(Node); 这是语法糖: for i := 0 to TreeView.Items.Count-1 do DoSomething(TreeView.Items[i]); 在可读性方面,我建议使用for / in循环. 在不支持节点迭代器的较旧的Delphi版本中,您可能更喜欢使用while循环. Node := TreeView.Items.GetFirstNode; while Assigned(Node) do begin DoSomething(Node); Node := Node.GetNext; end; 我希望还有其他方法可以做到这一点.这是我所知道的唯一! LU RD对documentation的有趣观察结果表明:
这是真的.对于随机访问,代码必须从根开始遍历树,直到找到第i个节点. 但是,对顺序访问进行了优化. Delphi树视图包装器会记住索引所在的最后一个节点的索引.下次请求索引与缓存节点的索引不超过一个的节点时,可以快速返回所需的节点.这是在TTreeNodes.GetNodeFromIndex中实现的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |