有几个基本概念不是很明白,求教:
1. TreeNode tn = new TreeNode();
    treeView1.Nodes.Add(tn);        是否是将tn添加为treeView1的根节点?2. 接着上面的treeView1,假设根节点已存在,那么treeView1.Nodes[0]是否代表树结构的根节点?(即第一个节点)3. Nodes[0]代表第一个节点的话,能否用treeView1.Nodes[0].Nodes[0]....Nodes[0].Nodes[0]来一直搜索下去(假设树结构很长)?4. TreeNode tn0 = treeView1.Nodes[0] 是否是将根节点赋给tn0?还是说将根节点与其所有子孙节点集合 一块赋过去?5. 假设有treeView1,treeView2,其中treeView2为空,能否直接用treeView2 = treeView1来进行复制?6.有没有什么方法可以将某个节点与其所有子孙节点一块复制的?(Clone是否可行?)TreeView

解决方案 »

  1.   

    1. TreeNode tn = new TreeNode();
        treeView1.Nodes.Add(tn);        是否是将tn添加为treeView1的根节点?
    是的,但是TreeView允许多个根节点。
    2. 接着上面的treeView1,假设根节点已存在,那么treeView1.Nodes[0]是否代表树结构的根节点?(即第一个节点)
    是的。
    3. Nodes[0]代表第一个节点的话,能否用treeView1.Nodes[0].Nodes[0]....Nodes[0].Nodes[0]来一直搜索下去(假设树结构很长)?
    可以,但是只能找每一级的第一个节点
    4. TreeNode tn0 = treeView1.Nodes[0] 是否是将根节点赋给tn0?还是说将根节点与其所有子孙节点集合 一块赋过去?
    tn0是一个指向这个节点的引用,当然你可以通过它访问到所有的后继子节点。但是要注意,这是一个引用(不是拷贝),如果你修改了tn0.Nodes[0].Nodes[0].Text,那么和直接修改treeView1.Nodes[0].Nodes[0].Nodes[0].Text是一样的。
    5. 假设有treeView1,treeView2,其中treeView2为空,能否直接用treeView2 = treeView1来进行复制?
    不可以
    6.有没有什么方法可以将某个节点与其所有子孙节点一块复制的?(Clone是否可行?)
    递归创建。Clone不行。
      

  2.   


    感谢回复!问题5,我想把treeView1直接复制到treeView2中,那么该使用什么方法?问题6,MSDN上说Clone是:复制树节点和以此树节点为根的整个子树,为什么Clone不行呢?如果我找到某个树的根节点(假设只有一个根节点),那么用Clone不就可以将整个树复制了吗?求解。
      

  3.   


    额,前辈,还有个问题,关于问题4引用:如果我创建一个哈希表存储节点,如下:
    Hashtable ht = new Hashtable(); 
    ht.Add(firstLine, treeView1.Nodes[0]);
    进行一些操作后,再将其取出:
    TreeNode save_tn = new TreeNode();
    save_tn = (TreeNode)de.Value;
    在此之后对save_tn进行一些添加节点操作,能等同于直接修改treeView1吗?(这里的引用经过哈希表存储再取出后是否还有效?)