delphi – 通过树视图中的节点递归迭代?

前端之家收集整理的这篇文章主要介绍了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中实现的.

猜你在找的Delphi相关文章