采用数组: procedure TForm1.Button1Click(Sender: TObject); var a:array of Ttreenode; node:TTreenode; i,j,count:integer; begin i:=0;j:=0; Count:=Treeview1.Items.Count; setlength(a,Count); node:=Treeview1.TopItem; while node<>nil do begin a[i]:=node; node:=node.getNextSibling; i:=i+1; end; j:=i-1; i:=0; while i<Count do begin node:=a[i].getfirstchild; while node <> nil do begin j:=j+1; a[j]:=node; node:=node.getNextSibling; end; i:=i+1; end; //以下用于集中输出,当然也可以在中间输出 for i:=0 to Count-1 do listbox1.Items.Add(a[i].text); end;
procedure TForm1.FormShow(Sender: TObject); var TreeNodeProvince,TreeNodeCity : TTreeNode; NodeDataRecPtr : PNodeDataRec; RegAdmiCode,Temp : String; begin TreeView1.Items.Clear; //TreeNodeProvince := nil; //TreeNodeCity := nil; with Query1 do begin Close; SQL.Clear; SQL.Text := 'select * from Admipartition order by ADMIPARTITIONNO asc'; try Open; except Close; Exit; end; //----^ if not (bof and eof) then begin First; while Not eof do begin Temp := fieldbyname('AdmipartitionNo').AsString; if Copy(fieldbyname('AdmipartitionNo').AsString,3,4) = '0000' then begin New(NodeDataRecPtr); NodeDataRecPtr^.AdmiName := FieldByName('ADMIPARTITIONNAME').AsString; NodeDataRecPtr^.AdmiCode := FieldByName('ADMIPARTITIONNO').AsString; TreeNodeProvince := TreeView1.Items.AddObject(nil,FieldByName('ADMIPARTITIONNAME').AsString + '' + FieldByName('ADMIPARTITIONNO').AsString,NodeDataRecPtr); // TreeNodeProvince := TreeView1.Items.Add(nil,FieldByName('ADMIPARTITIONNAME').AsString // ); end else if Copy(FieldByName('ADMIPARTITIONNO').AsString,5,2) = '00' then begin New(NodeDataRecPtr); NodeDataRecPtr^.AdmiName := FieldByName('ADMIPARTITIONNAME').AsString; NodeDataRecPtr^.AdmiCode := FieldByName('ADMIPARTITIONNO').AsString; TreeNodeCity := TreeView1.Items.AddChildObject(TreeNodeProvince,FieldByName('ADMIPARTITIONNAME').AsString,NodeDataRecPtr); end else begin New(NodeDataRecPtr); NodeDataRecPtr^.AdmiName := FieldByName('ADMIPARTITIONNAME').AsString; NodeDataRecPtr^.AdmiCode := FieldByName('ADMIPARTITIONNo').AsString; TreeView1.Items.AddChildObject(TreeNodeCity,FieldByName('ADMIPARTITIONNAME').AsString,NodeDataRecPtr); end; Next; end; end; end; TreeView1.SetFocus; TreeView1Click(Self); end;
procedure TForm1.Button1Click(Sender: TObject); var CurrNode : TTreeNode; begin with TreeView1 do begin CurrNode := Items.GetFirstNode; while CurrNode <> nil do begin Items.AddChild(CurrNode,'子节点'); //这里给当前节点增加子节点 CurrNode := CurrNode.getNextSibling; //这个方法就是得到同属一层节点 end; end; end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:array of Ttreenode;
node:TTreenode;
i,j,count:integer;
begin
i:=0;j:=0;
Count:=Treeview1.Items.Count;
setlength(a,Count);
node:=Treeview1.TopItem;
while node<>nil do
begin
a[i]:=node;
node:=node.getNextSibling;
i:=i+1;
end;
j:=i-1;
i:=0;
while i<Count do
begin
node:=a[i].getfirstchild;
while node <> nil do
begin
j:=j+1;
a[j]:=node;
node:=node.getNextSibling;
end;
i:=i+1;
end;
//以下用于集中输出,当然也可以在中间输出
for i:=0 to Count-1 do
listbox1.Items.Add(a[i].text);
end;
只要你程序里能引用到它,用这个节点的ALLCHILDNODE就行了!
var
TreeNodeProvince,TreeNodeCity : TTreeNode;
NodeDataRecPtr : PNodeDataRec;
RegAdmiCode,Temp : String;
begin
TreeView1.Items.Clear;
//TreeNodeProvince := nil;
//TreeNodeCity := nil;
with Query1 do
begin
Close;
SQL.Clear;
SQL.Text := 'select * from Admipartition order by ADMIPARTITIONNO asc';
try
Open;
except
Close;
Exit;
end;
//----^ if not (bof and eof) then
begin
First;
while Not eof do
begin
Temp := fieldbyname('AdmipartitionNo').AsString; if Copy(fieldbyname('AdmipartitionNo').AsString,3,4) = '0000' then
begin
New(NodeDataRecPtr);
NodeDataRecPtr^.AdmiName := FieldByName('ADMIPARTITIONNAME').AsString;
NodeDataRecPtr^.AdmiCode := FieldByName('ADMIPARTITIONNO').AsString;
TreeNodeProvince := TreeView1.Items.AddObject(nil,FieldByName('ADMIPARTITIONNAME').AsString +
'' + FieldByName('ADMIPARTITIONNO').AsString,NodeDataRecPtr); // TreeNodeProvince := TreeView1.Items.Add(nil,FieldByName('ADMIPARTITIONNAME').AsString
// );
end
else
if Copy(FieldByName('ADMIPARTITIONNO').AsString,5,2) = '00' then
begin
New(NodeDataRecPtr);
NodeDataRecPtr^.AdmiName := FieldByName('ADMIPARTITIONNAME').AsString;
NodeDataRecPtr^.AdmiCode := FieldByName('ADMIPARTITIONNO').AsString;
TreeNodeCity := TreeView1.Items.AddChildObject(TreeNodeProvince,FieldByName('ADMIPARTITIONNAME').AsString,NodeDataRecPtr);
end
else
begin
New(NodeDataRecPtr);
NodeDataRecPtr^.AdmiName := FieldByName('ADMIPARTITIONNAME').AsString;
NodeDataRecPtr^.AdmiCode := FieldByName('ADMIPARTITIONNo').AsString;
TreeView1.Items.AddChildObject(TreeNodeCity,FieldByName('ADMIPARTITIONNAME').AsString,NodeDataRecPtr); end;
Next;
end;
end;
end;
TreeView1.SetFocus;
TreeView1Click(Self);
end;
var
CurrNode : TTreeNode;
begin
with TreeView1 do
begin
CurrNode := Items.GetFirstNode;
while CurrNode <> nil do
begin
Items.AddChild(CurrNode,'子节点'); //这里给当前节点增加子节点 CurrNode := CurrNode.getNextSibling; //这个方法就是得到同属一层节点
end;
end;
end;