Jer*_*dge 6 delphi iteration treeview recursion
我有一个树视图,已经填充了另一个过程中的文件/文件夹.我想逐个遍历树视图中的项目,按照从上到下的确切顺序进行迭代.但是,与普通列表不同,我不能只使用一个简单的for语句.我必须进入每个节点等
我该怎么做呢?我希望有一种方法可以在不运行递归程序的情况下完成.当我遍历这些项目时,我不一定关心当前聚焦的父节点或子节点.我只需要能够在Data传递它们时读取每个节点的属性,并在我浏览时突出显示树视图中的当前节点.对于此树视图中的每个项目,我将执行一些工作,并希望在此过程中直观地向用户显示当前选择的项目.
Dav*_*nan 16
实际上你可以使用for循环.
var
Node: TTreeNode;
....
for Node in TreeView.Items do
DoSomething(Node);
Run Code Online (Sandbox Code Playgroud)
这是语法糖:
for i := 0 to TreeView.Items.Count-1 do
DoSomething(TreeView.Items[i]);
Run Code Online (Sandbox Code Playgroud)
在可读性方面,我会推荐for/in循环.
在不支持节点迭代器的旧版Delphi中,您可能更喜欢使用while循环.
Node := TreeView.Items.GetFirstNode;
while Assigned(Node) do
begin
DoSomething(Node);
Node := Node.GetNext;
end;
Run Code Online (Sandbox Code Playgroud)
我希望还有其他方法可以做到这一点.这是我所知道的唯一!
LU RD做了有趣的观察,文档说明:
按索引访问树视图项可能非常耗时,尤其是当树视图包含许多项时.为获得最佳性能,请尝试设计应用程序,使其尽可能少地依赖树视图的项目索引.
这是真的.对于随机访问,代码必须从根开始遍历树,直到找到第i 个节点.
但是,对顺序访问进行了优化.Delphi树视图包装器会记住索引所在的最后一个节点的索引.下次请求索引与缓存节点的索引不超过一个的节点时,可以快速返回所需的节点.这是在实现的TTreeNodes.GetNodeFromIndex.
| 归档时间: |
|
| 查看次数: |
7249 次 |
| 最近记录: |