1.展开 procedure TForm1.Button1Click(Sender: TObject); begin TreeView1.Selected.Expand(True); end; 2。取子结点下面只取下一层的如果要全部取得要用递归 procedure TForm1.Button2Click(Sender: TObject); var SelectedNode, ChildNode: TTreeNode; I: Integer; begin SelectedNode := TreeView1.Selected; if SelectedNode <> nil then begin for I := 0 to SelectedNode.Count - 1 do begin ShowMessage(SelectedNode.Item[I].Text); end; end; end;
procedure TJG_CustomerPriceF.NodeSelect(Node: TTreeNode); var Node0,Node1,Node2,Node3,Node4: TTreeNode; begin if Node=nil then exit; Node0 := Node; case Node0.StateIndex of 1: //之前为全选状态,通过此过程将其和其所有孩子节点的选择状态全取消,置为2 begin TreeCust.Selected := Node0; TreeCust.Selected.StateIndex := 2; Node1 := Node0.getFirstChild; while Node1<>nil do begin TreeCust.Selected := Node1; TreeCust.Selected.StateIndex := 2; Node2 := Node1.getFirstChild; while Node2<>nil do begin TreeCust.Selected := Node2; TreeCust.Selected.StateIndex := 2; Node3 := Node2.getFirstChild; while Node3<>nil do begin TreeCust.Selected := Node3; TreeCust.Selected.StateIndex := 2; Node4 := Node3.getFirstChild; while Node4<>nil do begin TreeCust.Selected := Node4; TreeCust.Selected.StateIndex := 2; Node4 := Node3.GetNextChild(Node4); end; Node3:=Node2.GetNextChild(Node3); end; Node2:=Node1.GetNextChild(Node2); end; Node1 := Node0.GetNextChild(Node1); end; end; 2: //之前为全取消状态,通过此过程将其和其所有孩子节点的选择状态全选择,置为0 begin TreeCust.Selected := Node0; TreeCust.Selected.StateIndex := 1; Node1 := Node0.getFirstChild; while Node1<>nil do begin TreeCust.Selected := Node1; TreeCust.Selected.StateIndex := 1; Node2 := Node1.getFirstChild; while Node2<>nil do begin TreeCust.Selected := Node2; TreeCust.Selected.StateIndex := 1; Node3 := Node2.getFirstChild; while Node3<>nil do begin TreeCust.Selected := Node3; TreeCust.Selected.StateIndex := 1; Node4 := Node3.getFirstChild; while Node4<>nil do begin TreeCust.Selected := Node4; TreeCust.Selected.StateIndex :=1; Node4 := Node3.GetNextChild(Node4); end; Node3:=Node2.GetNextChild(Node3); end; Node2:=Node1.GetNextChild(Node2); end; Node1 := Node0.GetNextChild(Node1); end; end; 3: //之前为部分选择状态,通过此过程将其和其所有孩子节点的选择状态全选择,置为0 begin TreeCust.Selected := Node0; TreeCust.Selected.StateIndex := 1; Node1 := Node0.getFirstChild; while Node1<>nil do begin TreeCust.Selected := Node1; TreeCust.Selected.StateIndex := 1; Node2 := Node1.getFirstChild; while Node2<>nil do begin TreeCust.Selected := Node2; TreeCust.Selected.StateIndex := 1; Node3 := Node2.getFirstChild; while Node3<>nil do begin TreeCust.Selected := Node3; TreeCust.Selected.StateIndex := 1; Node4 := Node3.getFirstChild; while Node4<>nil do begin TreeCust.Selected := Node4; TreeCust.Selected.StateIndex := 1; Node4 := Node3.GetNextChild(Node4); end; Node3:=Node2.GetNextChild(Node3); end; Node2:=Node1.GetNextChild(Node2); end; Node1 := Node0.GetNextChild(Node1); end; end; end; TreeCust.Selected := Node; end;
我猜你可能是要,子节点动态生成的例子把,我有一个,你可以参考一下unit IMSBMZJJG;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, G_FormBillBase, Wwintl, StdCtrls, TrMemo, CloseBit, ExtCtrls, TrPanel, TeeProcs, TeeDraw3D, ComCtrls, Db, DBTables;type TFrmBMZJJG = class(TfrmBillBase) TreeView1: TTreeView; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TreeView1Change(Sender: TObject; Node: TTreeNode); private { Private declarations } public { Public declarations } dwmc:string; dwdm:string; end;var FrmBMZJJG: TFrmBMZJJG;implementation{$R *.DFM}procedure TFrmBMZJJG.FormShow(Sender: TObject); var MyTreeNode1:TTreeNode; MyTreeNode2:TTreeNode; MyTreeNode3:TTreeNode; begin //生成第一级目录 TreeView1.Items.Clear; MyTreeNode1:=TreeView1.Items.AddChild(nil,'有限公司-X0000000'); MyTreeNode2:=TreeView1.Items.AddChild(MyTreeNode1,'主体单位-Z0000010'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'公司机关-Z0000011'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'生产单位-Z0000012'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'辅助单位-Z0000013'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'营销单位-Z0000014'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'后勤单位-Z0000015'); MyTreeNode2.Expanded:=True; MyTreeNode2:=TreeView1.Items.AddChild(MyTreeNode1,'分离单位-F0000010'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'龙华公司-XLH00000'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'兴达公司-XXD00000'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'工程公司-XGC00000'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'经贸公司-XJM00000'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'汽运公司-XQY00000'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'林铁矿-XK100000'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'星矿-XK200000'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'职工医院-XYY00000'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'工学院-XX100000'); MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'协调办-XXT00000'); MyTreeNode1.Expanded:=True; MyTreeNode2.Expanded:=True; end;procedure TFrmBMZJJG.FormClose(Sender: TObject; var Action: TCloseAction); var node:TTreenode; begin inherited; node:=treeview1.selected; dwdm:=Trim(copy(Node.Text,Pos('-',Node.Text)+1,Length(Node.Text)));//取得部门编码 dwmc:=Trim(copy(trim(node.Text),1,Pos('-',Node.Text)-1));//取得部门编码 action:=cafree; end;procedure TFrmBMZJJG.TreeView1Change(Sender: TObject; Node: TTreeNode); var Query3:TQuery; begin inherited; if ((Node.Level>1) and (Node.HasChildren=False) and (Node.Level<4)) then begin //生成下一级目录 Query3:=TQuery.Create(Application); Query3.DatabaseName:='IMS_DATA'; Query3.Close; Query3.SQL.Clear; Query3.SQL.Add('SELECT * FROM BISFCDEPA '); Query3.SQL.Add('WHERE UP_DEPARTMENT_CODE=:Aup_Department_Code AND DELETE_SIGN=''N'' '); Query3.SQL.Add('AND DEPARTMENT_GRADE<>''6'' AND DEPARTMENT_GRADE<>''7'''); Query3.ParamByName('Aup_Department_Code').AsString:=copy(Node.Text,Pos('-',Node.Text)+1,Length(Node.Text)); Query3.Open; Query3.First; if Query3.RecordCount<>0 then begin while not Query3.Eof do begin TreeView1.Items.AddChild(Node,Query3.FieldByName('DEPARTMENT_NAME').AsString+'-'+Query3.FieldByName('DEPARTMENT_CODE').AsString); Query3.Next; end; end; Query3.Free; Node.Expanded:=True; end; end;end.
procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Selected.Expand(True);
end;
2。取子结点下面只取下一层的如果要全部取得要用递归
procedure TForm1.Button2Click(Sender: TObject);
var
SelectedNode, ChildNode: TTreeNode;
I: Integer;
begin
SelectedNode := TreeView1.Selected;
if SelectedNode <> nil then
begin
for I := 0 to SelectedNode.Count - 1 do
begin
ShowMessage(SelectedNode.Item[I].Text);
end;
end;
end;
var
Node0,Node1,Node2,Node3,Node4: TTreeNode;
begin
if Node=nil then exit;
Node0 := Node;
case Node0.StateIndex of
1: //之前为全选状态,通过此过程将其和其所有孩子节点的选择状态全取消,置为2
begin
TreeCust.Selected := Node0;
TreeCust.Selected.StateIndex := 2;
Node1 := Node0.getFirstChild;
while Node1<>nil do
begin
TreeCust.Selected := Node1;
TreeCust.Selected.StateIndex := 2;
Node2 := Node1.getFirstChild;
while Node2<>nil do
begin
TreeCust.Selected := Node2;
TreeCust.Selected.StateIndex := 2;
Node3 := Node2.getFirstChild;
while Node3<>nil do
begin
TreeCust.Selected := Node3;
TreeCust.Selected.StateIndex := 2;
Node4 := Node3.getFirstChild;
while Node4<>nil do
begin
TreeCust.Selected := Node4;
TreeCust.Selected.StateIndex := 2;
Node4 := Node3.GetNextChild(Node4);
end;
Node3:=Node2.GetNextChild(Node3);
end;
Node2:=Node1.GetNextChild(Node2);
end;
Node1 := Node0.GetNextChild(Node1); end;
end;
2: //之前为全取消状态,通过此过程将其和其所有孩子节点的选择状态全选择,置为0
begin
TreeCust.Selected := Node0;
TreeCust.Selected.StateIndex := 1;
Node1 := Node0.getFirstChild;
while Node1<>nil do
begin
TreeCust.Selected := Node1;
TreeCust.Selected.StateIndex := 1;
Node2 := Node1.getFirstChild;
while Node2<>nil do
begin
TreeCust.Selected := Node2;
TreeCust.Selected.StateIndex := 1;
Node3 := Node2.getFirstChild;
while Node3<>nil do
begin
TreeCust.Selected := Node3;
TreeCust.Selected.StateIndex := 1;
Node4 := Node3.getFirstChild;
while Node4<>nil do
begin
TreeCust.Selected := Node4;
TreeCust.Selected.StateIndex :=1;
Node4 := Node3.GetNextChild(Node4);
end;
Node3:=Node2.GetNextChild(Node3);
end;
Node2:=Node1.GetNextChild(Node2);
end;
Node1 := Node0.GetNextChild(Node1); end;
end;
3: //之前为部分选择状态,通过此过程将其和其所有孩子节点的选择状态全选择,置为0
begin
TreeCust.Selected := Node0;
TreeCust.Selected.StateIndex := 1;
Node1 := Node0.getFirstChild;
while Node1<>nil do
begin
TreeCust.Selected := Node1;
TreeCust.Selected.StateIndex := 1;
Node2 := Node1.getFirstChild;
while Node2<>nil do
begin
TreeCust.Selected := Node2;
TreeCust.Selected.StateIndex := 1;
Node3 := Node2.getFirstChild;
while Node3<>nil do
begin
TreeCust.Selected := Node3;
TreeCust.Selected.StateIndex := 1;
Node4 := Node3.getFirstChild;
while Node4<>nil do
begin
TreeCust.Selected := Node4;
TreeCust.Selected.StateIndex := 1;
Node4 := Node3.GetNextChild(Node4);
end;
Node3:=Node2.GetNextChild(Node3);
end;
Node2:=Node1.GetNextChild(Node2);
end;
Node1 := Node0.GetNextChild(Node1); end;
end;
end;
TreeCust.Selected := Node;
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
G_FormBillBase, Wwintl, StdCtrls, TrMemo, CloseBit, ExtCtrls, TrPanel,
TeeProcs, TeeDraw3D, ComCtrls, Db, DBTables;type
TFrmBMZJJG = class(TfrmBillBase)
TreeView1: TTreeView;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
private
{ Private declarations }
public
{ Public declarations }
dwmc:string;
dwdm:string;
end;var
FrmBMZJJG: TFrmBMZJJG;implementation{$R *.DFM}procedure TFrmBMZJJG.FormShow(Sender: TObject);
var
MyTreeNode1:TTreeNode;
MyTreeNode2:TTreeNode;
MyTreeNode3:TTreeNode;
begin
//生成第一级目录
TreeView1.Items.Clear;
MyTreeNode1:=TreeView1.Items.AddChild(nil,'有限公司-X0000000');
MyTreeNode2:=TreeView1.Items.AddChild(MyTreeNode1,'主体单位-Z0000010');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'公司机关-Z0000011');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'生产单位-Z0000012');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'辅助单位-Z0000013');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'营销单位-Z0000014');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'后勤单位-Z0000015');
MyTreeNode2.Expanded:=True;
MyTreeNode2:=TreeView1.Items.AddChild(MyTreeNode1,'分离单位-F0000010');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'龙华公司-XLH00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'兴达公司-XXD00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'工程公司-XGC00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'经贸公司-XJM00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'汽运公司-XQY00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'林铁矿-XK100000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'星矿-XK200000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'职工医院-XYY00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'工学院-XX100000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'协调办-XXT00000');
MyTreeNode1.Expanded:=True;
MyTreeNode2.Expanded:=True;
end;procedure TFrmBMZJJG.FormClose(Sender: TObject; var Action: TCloseAction);
var node:TTreenode;
begin
inherited;
node:=treeview1.selected;
dwdm:=Trim(copy(Node.Text,Pos('-',Node.Text)+1,Length(Node.Text)));//取得部门编码
dwmc:=Trim(copy(trim(node.Text),1,Pos('-',Node.Text)-1));//取得部门编码
action:=cafree;
end;procedure TFrmBMZJJG.TreeView1Change(Sender: TObject; Node: TTreeNode);
var Query3:TQuery;
begin
inherited;
if ((Node.Level>1) and (Node.HasChildren=False) and (Node.Level<4)) then
begin
//生成下一级目录
Query3:=TQuery.Create(Application);
Query3.DatabaseName:='IMS_DATA';
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('SELECT * FROM BISFCDEPA ');
Query3.SQL.Add('WHERE UP_DEPARTMENT_CODE=:Aup_Department_Code AND DELETE_SIGN=''N'' ');
Query3.SQL.Add('AND DEPARTMENT_GRADE<>''6'' AND DEPARTMENT_GRADE<>''7''');
Query3.ParamByName('Aup_Department_Code').AsString:=copy(Node.Text,Pos('-',Node.Text)+1,Length(Node.Text));
Query3.Open;
Query3.First;
if Query3.RecordCount<>0 then
begin
while not Query3.Eof do
begin
TreeView1.Items.AddChild(Node,Query3.FieldByName('DEPARTMENT_NAME').AsString+'-'+Query3.FieldByName('DEPARTMENT_CODE').AsString);
Query3.Next;
end;
end;
Query3.Free;
Node.Expanded:=True;
end;
end;end.