- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 TreeView ,其中已经填充了来自另一个过程的文件/文件夹。我想按照从上到下的确切顺序逐项迭代 TreeView 中的项目。但是,与普通列表不同,我不能仅使用简单的 for
语句来实现此目的。我必须进入每个节点等。
我该怎么做?我希望有一种方法可以在不运行递归过程的情况下做到这一点。当我迭代这些项目时,我不一定关心当前关注的项目的父节点或子节点。我只需要能够在传递每个节点时读取它们的 Data 属性,并在浏览 TreeView 时突出显示 TreeView 中的当前节点。对于此 TreeView 中的每一项,我将执行一些工作,并希望直观地向用户显示在此过程中当前选择的一项。
最佳答案
事实上,您可以使用 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.
这确实是事实。对于随机访问,代码必须从根开始遍历树,直到找到第 ith 节点。
但是,有针对顺序访问的优化。 Delphi TreeView 包装器会记住通过索引找到的最后一个节点的索引。下次请求索引与缓存节点相差不超过1的节点时,可以快速返回所需的节点。这是在 TTreeNodes.GetNodeFromIndex
中实现的。
关于delphi - 递归遍历 TreeView 中的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14045263/
我是一名优秀的程序员,十分优秀!