你要知道父节点的index,就有可能在不选中的情况下增加子结点了在不同窗体可用  fromname.treeview....的方法

解决方案 »

  1.   

    很方便:
        Var   p1,p11:TTreeNode;    p1:=Form1.TreeView1.Items.Add(Form1.TreeView1.TopItem,'叔叔'); { 叔 }
        p11:=Form1.TreeView1.Items.AddChild(p1,'叔叔的儿子');           { 叔的儿 }
      

  2.   

    上面错了: DELPHI的空指针不知道,暂用表示
        Var  p1,p11:TTreeNode;    p1:=Form1.TreeView1.Items.Add(NULL,'叔叔');           { 叔 }
        p11:=Form1.TreeView1.Items.AddChild(p1,'叔叔的儿子'); { 叔的儿 }
    ------------------------------------------------------------------
       如果要求p1不被选中,哪你总要提供他的位置吧,也就是第几个叔叔,
       排行i(0开始编号);
        var  i:integer; p1,p11:TTreeNode;
        p1:=Form1.TreeView1.Items.Item[i];    { i 叔 }
        p11:=Form1.TreeView1.Items.AddChild(p1,'i叔的儿子'); { i叔的儿 } 
      

  3.   

    谢谢大家对我的回答,增加父节点的事件和增加子节点的事件不在一个窗体中,其实我只要获得在treeview中的最后增加的一个父节点就可以了,但在delphi中可以获得最顶的节点Form1.TreeView1.TopItem,但不知道如何获得treeview中最后一次增加的父节点,当然在这之前还有另外一个父节点和他的子节点。
      

  4.   

    在Treeview增加一个父节点时用一个指向TTreeNode的指针指向它,等待下一次引用不就可以了吗?
      

  5.   

    把最后添加的父节点保存在全局变量中就可以;
    若实在不行,用下列办法:找到最后一个层号为0
    的结点p1,就是“小叔”了;... TForm1.Button1Click(...)var p1,t:TTreeNode;i:integer;
    begin
       p1:=nil;
       for i:=0 to TreeView1.Items.Count-1
          begin
             t:=TreeView1.Items.Item[i];
             if (t.Level=0) then
                p1:=t;
          end
       ShowMessage(p1.Text);  { 小叔 p1 }
    end
      

  6.   

    循环颠倒一下更好,一找到就可结束循环:... TForm1.Button1Click(...)var p1,t:TTreeNode;i:integer;
    begin
       p1:=nil;
       for i:=TreeView1.Items.Count-1 downto 0 
          begin
             t:=TreeView1.Items.Item[i];
             if (t.Level=0) then
                begin
                   p1:=t;
                   break;  //一找到就可退出
                end
          end
       ShowMessage(p1.Text);  { 小叔 p1 }
    end