我想在目录树中实现这样的功能!点目录树的某个接点,我想把他下面的子接点查找出来!怎么实现!给点代码!谢谢

解决方案 »

  1.   

    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;
      

  2.   

    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;
      

  3.   

    我猜你可能是要,子节点动态生成的例子把,我有一个,你可以参考一下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.