catnode:=treeview1.Items.AddChild(topnode,'');
应该是
catnode:=treeview1.Items.AddChild(topnode,'childnode');
这样showmessage(m)就为‘childnode’

解决方案 »

  1.   

    试一下这样呢:
            ..........
    //使用指针;
    type
       PMyRec = ^TMyRec;
       TMyRec = record
         key: string;
         text: string;    
    end;
       ...........
    var p1,p2:pmyrec;
    ........
    new(p1);
    treeview1.SetFocus;
    if treeview1.items.count>0 then
    topnode:=treeview1.Selected;
    treeview1.FullExpand;
    p1.text:='ttttttttt';   //要加的字符;
    catnode:=treeview1.items.addchildobject(topnode,p1.text,p1);
    p2:=catnode.data;  //p2指向树的节点;
    showmessage(p2.text);//即可显示'ttttttttt';
    ........
      

  2.   

    var
      s: string;catnode:=treeview1.Items.AddChild(topnode, s);
    动态改变s就行了
      

  3.   

    我认为有可能是你用了treeview1.FullExpand,使用了它之后你的node值重新分配了,即你的
    catnode不是原值了,请注意!!
      

  4.   

    catnode:=treeview1.items.adchild(topnode,'');下面的treeview1.fullexpand我删掉了,但还是没用。
      

  5.   

    问题出现在这两行:
      catnode:=treeview1.Selected;
      m:=catnode.text;
    该成 
      Treeview1.Selected:=CatNode;
       ....
      CatNode.text := m;
      ShowMessage(CatNode.Text);
      

  6.   

    能否说的详细些,从你的代码来看显示与你的点击有关。另外catnode:=treeview1.items.addchild(topnode,''); string不要为空
    treeview1.fullexpand 不需要,加入接点后会自动展开。
      

  7.   

    你的意思是否是在点击后生成点击接点的子树?如果是这样,可参考如下:
    在TTREEVIEW的ONCLICK事件中
    写入
    form1.treeview1.items.add(treeview1.select,'a string');
      

  8.   

    程序如下(button1事件):
    treeview1.SetFocus;
    topnode:=treeview1.Selected;
    treeview1.FullExpand;
    catnode:=treeview1.Items.AddChild(topnode,'');
    treeview1.Selected:=catnode;
    catnode.EditText;
    treeview1.Refresh;
    catnode.Text:=m;
    showmessage(catnode.text);
    当我按下button1后,系统显示catnode.text为空, 空节点获得焦点,可以输入节点。但系统默认catnode为空,不知为何?????
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    var topnode,catnode : ttreenode;
        m : string;
    begin
      m := 'test';
      treeview1.SetFocus;
      topnode:=treeview1.Selected;
      treeview1.FullExpand;
      catnode:=treeview1.Items.AddChild(topnode,'');
      treeview1.Selected:=catnode;
      catnode.EditText;
      treeview1.Refresh;
      catnode.Text:=m;
      treeview1.Refresh;
      showmessage(catnode.text);end;
      

  10.   

    我的catnode.text有值,是不是你的M没送值?
      

  11.   

    我的意思是在点击节点后,出现以获得焦点的空节点,然后输入节点,现在空节点已经获得了焦点,但系统不承认我输入的节点,显然在在TTREEVIEW的ONCLICK事件中写入
    form1.treeview1.items.add(treeview1.select,'a string'); 是不行的。
      

  12.   

    用我上面的TForm1.Button1Click试试,点击接点,获得焦点,写入STRING,回车更改成功。应该就是你要求的样子了。
      

  13.   

    cgm:
     你那样做也不行,既然m给定了值,showmessage(catnode.text)也就等于m的值,我是动态增加节点!!!!
      

  14.   

    我都糊涂了,你的意思是建树,写入接点的值,SHOWMESSAGE再显示写入的值?
      

  15.   

    cgm():
    ''用我上面的TForm1.Button1Click试试,点击接点,获得焦点,写入STRING,回车更改成功''
    既然十点几事件,电极节点,又会生存点击节点下一个节点,谈何获得焦点点击节点的焦点呢?
      

  16.   

    点击BUTTON建立新接点
    点击接点可修改接点的TEXT,
    这不矛盾啊。
      

  17.   

    cgm():写入接点的值,SHOWMESSAGE再显示写入的值? 
      我就是不知道如何显示写入节点的值,如何存入数据库中?
      

  18.   

    LHB20010701(DSF): 上面我说的,只需要动态改变p1.text的值就可以了啊
    对于treeview,listview使用指针是最好的办法;
    点击节点的时候,获得的焦点还是你所点击的那个,也就是说,treeview1.selected还是你所点的那个节点.
      

  19.   

     tong_jin(YG):关于这个问题我搞了快一周了,程序具体如何写?,谢谢!一定加分!
      

  20.   

    tong_jin(YG):关于这个问题我搞了快一周了,程序具体如何写?,谢谢!一定加分! 
      

  21.   

    procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
      var S: String);
    begin
      showmessage(s);
    end;
    这里NODE为被修改的接点,S为修改后的新值。给分吧。
      

  22.   

    这样吧,我把我的一段源代码考上来给你参考.是建树的语句 点击树节点
    procedure TForm1.TreeView1Click(Sender: TObject);
    var ssql:string;
    begin
    if treeview1.Selected.HasChildren then abort;
    p1:=treeview1.selected.data;
      begin
        ssql:='select * from da_xlda where gxbh='+''''
               +p1.key+''''+' and iflag=''0'' order by xlbh';
        ado_tree1.Close;            //ado_tree 是一个adodataset;
        ado_tree1.CommandText:=ssql;
        ado_tree1.open;
        while not ado_tree1.Eof do
          begin
          new(p2);
     
          p2.key:=ado_tree1.FieldByName('xlbh').asstring;
           p2.text:=ado_tree1.FieldByName('xlmc').asstring;
    //下面这条语句是建立子节点,把p2.key;.text存储到树节点的data中去;
           t3:=treeview1.items.addchildobject(treeview1.selected,p2.text,p2);
           t3.StateIndex:=1;
           ado_tree1.next;
          end;
      end;
    end;
    前面省略了一些建树语句(在formcreate中)
    树的每节点中的data是一个指针 存储了两个数据;(.key;.text);需要的时候将其取出来就可以了;
      

  23.   

    YG():
     button1事件如下:
     new(p1);
    treeview1.SetFocus;
    if treeview1.items.count>0 then
    topnode:=treeview1.Selected;
    treeview1.FullExpand;
    catnode:=treeview1.items.addchildobject(topnode,'',p1);
    treeview1.Selected:=catnode;
    catnode.EditText;
    p2:=catnode.data;
    treeview1.edited事件如下:
    showmessage(p2.text);
    系统显示p2.text为空,不知为何?
      

  24.   

    你在建树的时候没有对p1.text赋值,存入树节点上的data的.txt值就为空;;这是因为data把p1的.key 和.text 存储了;还有 treeview1.setfocus;treeview1.fullexpand; 这两句不太必要;
    要显示 .text 就必须先让p2指向 节点的data 然后才可以显示 p2.text;
      

  25.   

    yg():
      如果我给p1.text:='123'赋值之后,系统显示showmessage(p2.text)为'123'
      

  26.   

    button事件:
    new(p1);
    p1.text:='123';
    treeview1.SetFocus;
    if treeview1.items.count>0 then
    topnode:=treeview1.Selected;
    topnode.Expand(true);
    catnode:=treeview1.items.addchildobject(topnode,'',p1);
    treeview1.Selected:=catnode;
    catnode.EditText;
    p2:=catnode.data;
    treeview1.edited事件:
    showmessage(p2.text);
    结果显示'123'.
      

  27.   

    我oicq号码是5765736 大家可以研究一下
      

  28.   

    不好意思,我一直没有申请到oicq。这样讨论一样的。
      

  29.   

    这几句去掉试一下呢,
    treeview1.SetFocus;
    topnode.Expand(true);
    还有
    showmessage前面加一ju
    p2:=treeview1.selected.data;不过我估计有可能误会你的原意了;
      

  30.   

    yg():
      可以肯定,catnode获得了焦点,我一直在想catnode修改之后,系统到底保存了没有?onediting事件是否要写?
      

  31.   

    没有 
    那只是在建立节点的时候data里面写了数据 
      

  32.   

    treeview1.SetFocus;
    topnode.Expand(true);
    这两局不能出掉,我试过,
    p2:=treeview1.selected.data
    我试过,死机了,我再试一次
      

  33.   

    如果要修改data 就必须重新建立节点;(可以删除再添加)
      

  34.   

    yg():
     我肯定是指针出了问题,我用showmessage(treeview1.Items[1].Text);管用,但是这样麻烦
      

  35.   

    treeview1.Items[1].Text是显示出来的text (就是treeview上的文字)
    items.data中是存储你想要存的数据;