我该怎么做呢?我希望有一种方法可以在不运行递归程序的情况下完成.当我遍历这些项目时,我不一定关心当前聚焦的父节点或子节点.我只需要能够在传递它们时读取每个节点的Data属性,并在我浏览时突出显示树视图中的当前节点.对于此树视图中的每个项目,我将执行一些工作,并希望在此过程中直观地向用户显示当前选择的项目.
解决方法
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 举报,一经查实,本站将立刻删除。