理想做法是如果有孩子index为0,如果有孩子并且展开的index为2,如果没有孩子就为1  procedure Tbmbm.TreeView1GetSelectedIndex(Sender: TObject;
  Node: TTreeNode);
  begin
      with   Node   do
      if   HasChildren   then
          if   Expanded   then
              ImageIndex:=2
          else
              ImageIndex:=0
      else
          ImageIndex:=1;  end;用了这段代码发现也不对,是不是应该在动态创建的时候创建呀

解决方案 »

  1.   

    Function Tbmbm.AddNode(TreeView:TTreeview;Node:TTreeNode;ADOQ:TADOQuery):TTreeNode;
    var
      Node1:TTreeNode;
      s:PString;
      i:integer;
      begin
      Node1:=TreeView.Items.AddChild(Node,ADOQ.FieldByName('bz').Text);
      New(s);
      s^:=ADOQ.FieldByName('id').Text;
      Node1.Data:=s;
      Result:=Node1;
    end;Function Tbmbm.SearchNode(TreeView:TTreeView;Txts:String):TTreeNode;
    var
      i:integer;
      s:PString;
        Node1:TTreeNode;
    begin
      Result:=nil;
      For i:=0 To TreeView.Items.Count-1 Do
       
        begin
          s:=TreeView.Items[i].Data;
          If s^=Txts Then
            begin
              Result:=TreeView.Items[i];
              Exit;
            end;
      end;
        end;procedure Tbmbm.Button1Click(Sender: TObject);
    var
      i,Rec_Num:integer;
      Node1,Node2:TTreeNode;
    begin
      TreeView1.Items.Clear;
      TreeView1.Items.BeginUpdate;
      Node1:=TreeView1.Items.GetFirstNode;
      with adoquery1 do
        begin
          close;
          sql.Clear;
          sql.Add('select * from bmbm order by id');
          open;
        end;
      If ADOquery1.RecordCount>0 Then
      Begin
        Rec_Num:= ADOQuery1.RecordCount;
        For i:=0 To Rec_Num-1 Do
        begin
          If ADOQuery1.FieldByName('parent').Text='0' Then
            Node2:=AddNode(TreeView1,Node1,ADOQuery1)
          Else
            begin
              Node2:=SearchNode(TreeView1,ADOQuery1.FieldByName('parent').Text);
              If Node2<>nil Then
                AddNode(TreeView1,Node2,ADOQuery1);
            end;
            ADOQuery1.Next;
          end;
       End;这是创建的代码,有谁会改吗