微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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的有趣观察结果表明:

Accessing tree view items by index can be time-intensive,particularly when the tree view contains many items. For optimal performance,try to design your application so that it has as few dependencies on the tree view’s item index as possible.

这是真的.对于随机访问,代码必须从根开始遍历树,直到找到第i个节点.

但是,对顺序访问进行了优化. Delphi树视图包装器会记住索引所在的最后一个节点的索引.下次请求索引与缓存节点的索引不超过一个的节点时,可以快速返回所需的节点.这是在TTreeNodes.GetNodeFromIndex中实现的.

原文地址:https://www.jb51.cc/delphi/101698.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐