我在TREEVIEW 中先定义好两个节点 A ,B  . 我想分别在其下面添加一个子节点
  tv1.Items.AddChild(tv1.Items.Item[0],'aaa');
  tv1.Items.AddChild(tv1.Items.Item[1],'bbb');结果两个节点都添加到 节点A 下面去了,我应该如何实现我想要的结果呢????谢谢大家帮助我~!!!

解决方案 »

  1.   

    改成:  tv1.Items.AddChild(tv1.Items.Item[0],'aaa');
      tv1.Items.AddChild(tv1.Items.Item[2],'bbb');再试试
      

  2.   

    procedure BuildTree;
    var
      nodeA, nodeB: TreeNode;
    begin
      nodeA := tv1.Items.Add('A');
      nodeB := tv1.Items.Add('B');
      tv1.Items.AddChild(nodeA, 'aaa');
      tv1.Items.AddChild(nodeB, 'bbb');
    end;如果A,B已经事先定义好了,就先进行扫描取得A,B的节点.
      

  3.   

    Sorry,我的Add方法打错了.应该是tv1.Items.Add(nil, 'A');
      

  4.   

    unit TreeFunc;interfaceuses
    Windows, Messages, SysUtils, Classes, Graphics, ComCtrls, DB, Forms, Dialogs;function  TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
    function  TreeAddItem(Sender: TTreeView; ItemList: TStrings; Book: TBook; Resort: Boolean): TTreeNode;
    function  TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
    procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);implementation
    function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Book: TBook; Resort: Boolean): TTreeNode;
    var
    ThisNode, Node: TTreeNode;
    I: Integer;
    begin
     Node := nil;   //nil = level 0 has no parent node
                    //this is checked by TreeFindItem
     for I := 0 to Itemlist.count -1 do
     begin
          ThisNode := TreeFindItem(Sender, node, Itemlist[i]); //查找当前是否有此值
          if ThisNode <> nil then Node := ThisNode else
          begin
               if I < Itemlist.count -1 then
               begin
                    if I = 0 then Node := Sender.items.Add(Node, Itemlist[i])
                    else Node := Sender.items.AddChild(Node, Itemlist[i]);
               end else
               begin
                    if I = 0 then Node := Sender.items.AddObject(Node, Itemlist[i], Book)
                    else Node := Sender.items.AddChildObject(Node, Itemlist[i], Book);
               end;
               Node.stateIndex := Node.level + 1;
               if Resort and (Node.parent <> nil) then Node.parent.alphasort; 
          end;
     end;
     Result := Node;
    end;function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
    begin
     if NodeItem = nil then NodeItem := Sender.items.getfirstnode
     else NodeItem := NodeItem.getfirstchild;
    //NodeItem is now the first item of the desired level
    //if this level has no items, NodeItem is nil if (NodeItem <> nil) and (NodeItem.text <> Name) then
     repeat
           NodeItem := NodeItem.getnextsibling;
     until (NodeItem = nil) or (NodeItem.text = Name);
     Result := NodeItem;
    end;function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
    begin
     Result := TreeAddItem(Sender, Itemlist, nil, false);
    end;procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);
    var
    Node, Parent: TTreeNode;
    begin
     Node := TreeGetItem(Sender, ItemList);
     while Node.level >= Level do
     begin
          Parent := Node.parent;
          Node.delete;
          if (Parent = nil) or (Parent.hasChildren) then break;
          Node := Parent;
     end;
    end;
    end.
      

  5.   

    举个例子
    procedure BuildTree;
    var
      nodeA, nodeB: TreeNode;
      i: integer;
    begin
      for i := 0 to tv1.Items.Count - 1 do
      begin
        if tv1.Items.Item[i].Text = 'A' then
          nodeA := tv1.Items.Item[i];
        if tv1.Items.Item[i].Text = 'B' then
          nodeB := tv1.Items.Item[i];    
      end;
      tv1.Items.AddChild(nodeA, 'aaa');
      tv1.Items.AddChild(nodeB, 'bbb');
    end;
      

  6.   

    luke5678(奇异) , 你说的方法只能解决 这个问题. 如果 A节点下还有其他的节点怎么呢??
    你又去改吗???