我用的delphi7.0
var
    tn : Ttreenode;
begin
  tv.Items.Clear;
  tv.Items.AddChildFirst(tn,'dd');
这么简单一个问题,怎么要不能插入呢?

解决方案 »

  1.   

    //一个例子(联系人)
    type
      PMyDataRec = ^TMyDataRec;
      TMyDataRec = record
        ID: string;
        IDP: string;
        GroupID: string;
        Mobile: string;
      end;const
      IMGMan = 0;
      IMGWoman = 1;
      IMGUnknown = 2;
    procedure TDM.AddContactInfoToTreeView(ATreeView: TTreeView);  procedure ClearTreeViewItems(ATreeView: TTreeView);
      var
        Node: TTreeNode;
      begin
        Node := ATreeView.Items.GetFirstNode;
        while Node <> nil do
        begin
          if Node.Data <> nil then
          begin
            Dispose(Node.Data);
          end;
          Node := Node.GetNext;
        end;
        ATreeView.Items.Clear;
      end;var
      GroupID: string;
      MyDataRec: PMyDataRec;
      Node1, Node2, Node3, Node4: TTreeNode;
    begin
      ClearTreeViewItems(ATreeView);
      New(MyDataRec);
      Node1 := ATreeView.Items.Add(nil, '联系人');
      MyDataRec.ID := '';
      MyDataRec.IDP := '';
      Node1.Data := MyDataRec;
      Node1.ImageIndex := IMGroot;
      Node1.SelectedIndex := IMGroot;
      with ADOQAddContactInfoToTreeView do
      begin
        ADOQGroup.Close;
        ADOQGroup.SQL.Clear;
        ADOQGroup.SQL.Add('Select * from Group1');
        ADOQGroup.Open;
        while not ADOQGroup.Eof do
        begin
          New(MyDataRec);
          GroupID := ADOQGroup.FieldByName('GroupID').AsString;
          MyDataRec.ID := GroupID;
          MyDataRec.GroupID := GroupID;
          Node2 := ATreeView.Items.AddChildObject(Node1, ADOQGroup.FieldValues['Name'], MyDataRec);
          if not Node1.Expanded then
            Node1.Expanded := True;
          Node2.ImageIndex := IMGGROUP;
          Node2.SelectedIndex := IMGGROUP;
          ADOQCompany.Close;
          ADOQCompany.SQL.Clear;
          ADOQCompany.SQL.Add('Select distinct Company.ID as cid, Company.Name as cname from Company, UClient');
          ADOQCompany.SQL.Add('Where (UClient.IDP Like Company.ID + ''%'') and (UClient.GroupID = :GroupID)');
          ADOQCompany.Parameters.ParamByName('GroupID').Value := GroupID;
          ADOQCompany.Open;
          while not ADOQCompany.Eof do
          begin
            New(MyDataRec);
            MyDataRec.ID := ADOQCompany.FieldByName('cid').Value;
            Node3 := ATreeView.Items.AddChildObject(Node2, ADOQCompany.FieldValues['CName'], MyDataRec);
            if not Node2.Expanded then
              Node2.Expanded := True;
            Node3.ImageIndex := IMGCONTACT;
            Node3.SelectedIndex := IMGCONTACT;
            ADOQPerson.Close;
            ADOQPerson.SQL.Clear;
            ADOQPerson.SQL.Add('select distinct * from UClient');
            ADOQPerson.SQL.Add('where (IDP Like :cid + ''%'') and (GroupID = :GroupID)');
            ADOQPerson.Parameters.ParamByName('CID').Value := MyDataRec.ID;
            ADOQPerson.Parameters.ParamByName('GroupID').Value := GroupID;
            ADOQPerson.Open;
            while not ADOQPerson.Eof do
            begin
              New(MyDataRec);
              MyDataRec.ID := ADOQPerson.FieldValues['ID'];
              MyDataRec.IDP := ADOQPerson.FieldValues['IDP'];
              MyDataRec.Mobile := ADOQPerson.FieldValues['Mobile'];
              Node4 := ATreeView.Items.AddChildObject(Node3, ADOQPerson.FieldValues['Name'], MyDataRec);
              case ADOQPerson.FieldByName('Sex').AsInteger of
                1:
                  begin
                    Node4.ImageIndex := IMGMan;
                    Node4.SelectedIndex := IMGMan;
                  end;
                2:
                  begin
                    Node4.ImageIndex := IMGWoman;
                    Node4.SelectedIndex := IMGWoman;
                  end;
                else
                  begin
                    Node4.ImageIndex := IMGUnknown;
                    Node4.SelectedIndex := IMGUnknown;
                  end;
              end;
              ADOQPerson.Next;
            end;
            ADOQCompany.Next;
          end;
          ADOQGroup.Next;
        end;
        Close;
      end;
    end;
      

  2.   

    其中使用的TreeNode的Data指针域
      

  3.   

    哦,按你说的还是提示还是报错,unable insert into item
      

  4.   

    当你使用了  tv.Items.Clear;这句时
    树就没有节点了,这时只能添加根节点
    不能添加子节点
    应该用tv.items.add(nil.'dd');
      

  5.   

    tv.Items.AddChildFirst(tn,'dd')第一个参数应该为nil或者有值。
    tn := tv.Items.AddChildFirst(nil,'aa');
    tv.Items.AddChildFirst(tn,'dd');