事实上,您可以使用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 进行了有趣的观察,文档指出:
按索引访问树视图项目可能会耗费大量时间,尤其是当树视图包含许多项目时。为获得最佳性能,请尝试设计您的应用程序,使其对树视图的项目索引的依赖关系尽可能少。
这是完全正确的。对于随机访问,代码必须遍历树,从根开始,直到找到第 i个节点。
但是,对顺序访问进行了优化。Delphi 树视图包装器记住由索引定位的最后一个节点的索引。下次你请求一个与缓存节点的索引不超过一个的节点时,可以快速返回所需的节点。这是在TTreeNodes.GetNodeFromIndex
.