1、已知一个字符串“vStr”,如何判断在TreeView中是否存在该节点2、如果第一问解决:如果存在该节点,在该节点创建新的字节点“vStrL”

解决方案 »

  1.   

    var i: Integer;
    begin
      for i := 0 to TreeView1.Items.Count - 1 do
        if TreeView1.Items[i].Text = 'vStr' then
          TreeView1.Items.AddChild(TreeView1.Items[i], 'vStrL');
    end;
      

  2.   

    不好意思,我的问题没有说清楚: sysu(死树) 的方法当然可行,我要的是效率!我有很多父子类型的数据,如: 子.........父
    vStrL1....vStr1       
    vStrL2....vStr1
    vStrL3....vStr1
    vStrL4....vStr1vStrL5....vStr2       
    vStrL6....vStr2
    vStrL7....vStr2
    vStrL8....vStr2...“子”数据排列无序,我要把这些数据加载到TreeView中,这样显示:父1
      子1
      子2
      子3
    ..
    父2
      子4
      子7
      子5
    ..排列顺序无所谓,我用循环得到  子 和 父,然后判断TreeView中是否存在 父,若存在
    则在该 父 下 加 子,若无,则新建 父 再加 子。不知道有没有说明白!
      

  3.   

    你看下面代码是否满足你的要求,用TList保存每次添加的父结点。procedure TForm1.Button1Click(Sender: TObject);
    var
      ParentList: TList;
      tNode: TTreeNode;  // 返回父结点,如果不存在则返回nil
      function GetNode(s: string): TTreeNode;
      var i: Integer;
      begin
        Result := nil;
        for i := 0 to ParentList.Count - 1 do
          if TTreeNode(ParentList[i]).Text = s then begin
            Result := TTreeNode(ParentList[i]);
            Break;
          end;
      end;begin
      parentList := TList.Create;  // 此处加入你的循环
      tNode := GetNode('vStr');
      if tNode = nil then begin
        tNode := TreeView1.Items.AddChild(nil, 'vStr');
        ParentList.Add(tNode);
      end;
      TreeView1.Items.AddChild(tNode, 'vStrL');
      // 循环结束  parentList.Free;
    end;
      

  4.   

    谢谢!
    我从数据上作了手脚,我把父节点存储下来了(TStrings),然后按顺序生成父节点,在每个父节点下生成对应的字节点!