使用时,选定一个节点(必须有子节点),自己可以把代码完善,避免一些错误 var i,level:integer; begin level := TreeView1.Selected.Level; for i := TreeView1.Selected.Index + 1 to TreeView1.Items.Count - 1 do begin if TreeView1.Items[i].Level = level then Break; ListBox1.Items.Add(TreeView1.Items[i].Text) end; end;
用FOR循环,慢S你,我试过了,超过五千多个节点时,差不多要一秒才能循环一遍
用GetNext来遍历,Index的效率比GetNext差 var ANode: TTreeNode;if TreeView.Items.Count > 0 then begin ANode := TreeView.Items[0]; while ANode <> nil do begin //做操作 ANode := ANode.GetNext; end; end;
哦,漏了看是某个节点下全部节点,改改:var ANode: TTreeNode;if TreeView.Selected <> nil then begin ANode := TreeView.Selected.GetFirstChild; while (ANode <> nil) and (ANode.Level > TreeView.Level) do begin //做操作 ANode := ANode.GetNext; end; end;
使用时,选定一个节点(必须有子节点),自己可以把代码完善,避免一些错误
var
i,level:integer;
begin
level := TreeView1.Selected.Level;
for i := TreeView1.Selected.Index + 1 to TreeView1.Items.Count - 1 do
begin
if TreeView1.Items[i].Level = level then
Break;
ListBox1.Items.Add(TreeView1.Items[i].Text)
end;
end;
var
ANode: TTreeNode;if TreeView.Items.Count > 0 then
begin
ANode := TreeView.Items[0];
while ANode <> nil do
begin
//做操作
ANode := ANode.GetNext;
end;
end;
ANode: TTreeNode;if TreeView.Selected <> nil then
begin
ANode := TreeView.Selected.GetFirstChild;
while (ANode <> nil) and (ANode.Level > TreeView.Level) do
begin
//做操作
ANode := ANode.GetNext;
end;
end;
//Delphi的TreeView控件提供了很多方法了.这里尽量使用一般的节点功能
procedure TForm1.StepDepthFirst(AFirstNode: TTreeNode);
var
mFirstLevel: Integer;
mCurrNode, mNode: TTreeNode;
label
VisitSibling;
begin
//深度优先遍历
//访问自己, 访问自己的子节点, 然后是兄弟节点
mFirstLevel := AFirstNode.Level;
mCurrNode := AFirstNode;
while True do
begin
//访问自己
Visit(mCurrNode); //访问子节点
mNode := mCurrNode.getFirstChild();
if (mNode <> nil) then
begin
mCurrNode := mNode;
Continue;
end;VisitSibling:
//访问兄弟节点
mNode := mCurrNode.getNextSibling();
if (mNode <> nil) then
begin
mCurrNode := mNode;
Continue;
end; mNode := mCurrNode.Parent;
if (mNode = nil) or (mNode.Level < mFirstLevel) then
Break; mCurrNode := mNode;
goto VisitSibling;
end;
end;
var
i: integer;
begin
while(Anode <> nil) do
begin
//你需要执行的操作
ANode:= ANode.GetNext;
end;
end;