我用一个递归算法动态建了一颗树(基于一个Xml文件创建的)。我现在想做的是把这棵树的节点的索引和某个值(假如为名称代码[NameCode]关联),需要在创建树的时候就关联好,由于树的大小是未知的,我不知道该怎么做,请大家帮忙。
递归算法描述如下:
procedure buildTree(aParentNode: TTreeNode;aNameCode,aNodeText:String);
var
    newTreeNode: TTreeNode;
    newNameCode: String;
    newNodeText: String;
begin
    //Add a child node
    newTreeNode := treeView1.Items.AddChild(aParentNode,nodeText);
    if hasChildNode(aNodeName) then
    begin
        //Get the new name code
        newNameCode := getNameCode(aNameCode);
        //Get the new node text
        newNodeText := getNodeText(aNameCode);
        buildTree(newTreeNode,newNameCode,newNodeText);
    end;
end;function hasChildNode(aNodeName: String): Boolean;
begin
    //Do something
end;function getNameCode(aNameCode: String): String;
begin
    //Do something
end;function getNodeText(aNameCode; String): String;
begin
    //Do something
end;我想用一个结构数组进行关联。结构数组可以定义如下:
Type
    relationRec=record
        nodeIndex: word;
        nameCode: String;
end;代码如上,请问下大家该怎么解决?谢谢。

解决方案 »

  1.   

    说错了,应该是结构定义如下:
    Type
        relationRec=record
            nodeIndex: word;
            nameCode: String;
    end;
      

  2.   

    请楼主看看 AddChildObject 方法的帮助
    其实一点都不难
    因为treeview 本身可以存储一个数据的
    定义结构是对的 最好定义一个结构指针
    还有 楼主为什么要自己写 hasChildNode 函数
    Treeview 本身就有Haschildren 这个函数这里不写代码了,希望楼主自己试 多看帮助
    我觉得很easy
      

  3.   

    to: zhu0119121(新人)
    有一点你可能理解错了,treeView本身的hasChildNode的方法是在你这棵树已经生成好的情况下才有用。我现在连树都没生成,何来hasChildNode.我这里只不过是取了一个比较相像的名字而已。在我的hasChildNode里边,我要处理很多逻辑的。
      

  4.   

    修正下,应该是treeView的本身的hasChildren而不是hasChildNode