看了csdn上面一些老的相似的帖子,貌似有一点儿不一样,所以自己开个贴
已有如下的书:
config
|-versionList
|-----versinon
|       |--id:123
|       |--fileList
|           |-file
|           |   |--fileName:123.txt
|           |   |--fileSize:122122
|           |   |--fileHash:asdfsdfs22
|           |   |--fileLevel:true
|           |-+file
|           |-+file
|-----+version
|-----+version
|-----+version
|-+newAllFiles好了问题是这样的,我需要给书中加一个新的version节点,是不是这样
我定义一个treenode,把我要加的数据写进去后
然后var
  nodes:TTreeNodes;begin
  nodes:=tv1.items;
  myNode:=nodes.addChild(tv1.items[1],'version')
end;
还有一个问题就是,你看我的version里面都有一个id,怎么根据id的值来给每个version排序。好的,谢谢各位。

解决方案 »

  1.   

    什么vt树?
    我用的TTreeView控件
    我看了下,他添加节点的方法,写了下面的代码  intDlg(dlgOpen1,'选择版本控制文件','versionList|versionList.xml|allfile|*.*');
      if dlgOpen1.Execute() then
      begin
    //    tv1.LoadFromFile(dlgOpen1.FileName);
        XMLDocument1.LoadFromFile(dlgOpen1.FileName);
        myVerList:=Getconfig(XMLDocument1);
        nodes:=tv1.Items;
        node:=nodes.Add(nil,'versionList');
        for I := 0 to myVerList.VersionList.Count - 1 do
        begin
          childnode:=nodes.AddChild(node,'version');
          cnode:=nodes.AddChild(childnode,'<id>'+myVerList.VersionList[i].Id+'</id>');
          cnode:=nodes.AddChild(childnode,'<abandon>'+myVerList.VersionList[i].Abandon+'</abandon>');      cnode:=nodes.AddChild(childnode,'fileList');      for j := 0 to myVerList.VersionList[i].FileList.Count - 1 do
          begin
            childnode:=nodes.AddChild(cnode,'File');
            bnode:=nodes.AddChild(childnode,'<path>'+myverList.VersionList[i].FileList[j].Path+'</path>');
            bnode:=nodes.AddChild(childnode,'<fileSize>'+inttostr(myverList.VersionList[i].FileList[j].FileSize)+'</fileSize>');
            bnode:=nodes.AddChild(childnode,'<fileHash>'+myverList.VersionList[i].FileList[j].FileHash+'</fileHash>');
            bnode:=nodes.AddChild(childnode,'<fileLevel>'+myverList.VersionList[i].FileList[j].FileLevel+'</fileLevel>')
          end;  
        end;
        node:=nodes.Add(nil,'AllFiles');
        childnode:=nodes.AddChild(node,'<allPath>'+myverList.NewAllFile.AllPath+'</allPath>');
        childnode:=nodes.AddChild(node,'<allSize>'+inttostr(myVerList.NewAllFile.AllSize)+'</allSize>');
        childnode:=nodes.AddChild(node,'<allHash>'+myVerList.NewAllFile.AllHash+'</allHash>');
        versionListPath:=dlgOpen1.FileName;
      end;
      btnFiles.Enabled:=True;
      btnAdd.Enabled:=True;
      btnPreview.Enabled:=True;
      btnSave.Enabled:=True;
      chkAllFiles.Enabled:=True;
    end;
    这个是把我的xml文件写到treeView里面去
    我看了直接loadFromFile函数,他是按照空格或者Tab来的,所以很多时候不准确。但是这个指定添加到某个节点下面我,没有看到有什么FindByText之类的函数,所以我来问问指定添加到某个节点下面怎么添加
    用treeView的items[index]么?来制定父节点??
      

  2.   

    我觉得你有必要把TTreeView,TTreeNodes,TTreeNode以及他们的基本方法属性搞清楚.要把F1尽量的使用起来。很多东西上面都直接有demo的。还有最好循序渐进,先把基础的搞清楚再去搞难的。就向你如果树都没搞清楚,你觉得再加上xml的代码你能看的上手吗?
      

  3.   

    var fatherNode: TTreeNode;
    begin
      
      fatherNode:=tree.Selected;//(比如要在选种节点下加子节点)
      if fatherNode=nil then exit;
      //fatherNode.HasChildren:=true;
      //fatherNode.Expand(false);  newNode:=tvWLCC.Items.AddChild(fatherNode,'请修改这个新名字');
      newNode.id=0;排序的话就要在加载树的时候排
    就像上学时练习的,数字排序加入到listbox 
    比较id 双重循环向父节点里加 (取出一个id跟其他的比较)