我们知道,treeview的nodes.add函数里的relationship参数取tvwchild的时候,插入的新节点的位置是指定节点的子节点。我的问题是:如果指定节点已经有多个子节点,那么新插入的节点的在这些子节点中位于什么位置?一般依据什么规则来确定新节点在兄弟间的排名刚才实际跟了一下,发现它插在众兄弟之中,也就是说,它既不是第一个,也不是最后一个,看不出什么规律来,很是奇怪。

解决方案 »

  1.   

    我认为是按语句执行的先后添加的,反复试了好多次,在tvwchild的情况下,最后的添加语句添加的子节点总在最后.你是否同时用了其它参数?
      

  2.   

    哦,谢谢张。我是这么添的:Set nodNew = m_tree.Nodes.Add(Relative:=m_tree.SelectedItem.Key, _
                    Relationship:=tvwChild, Text:=MakeNodeText(strNewName, 0, 0), Image:=2)就多用了text参数。你呢?
      

  3.   

    你的类内部是不是.Sorted = True了
      

  4.   

    回AisaC是。不过的话,你看一下这篇文章sorted对新添的节点是不起作用的,至少显示的排序是乱的,要添加完节点,重新用一下sorted才正确排序。
      

  5.   

    我自己扩展的树类里没有.sorted属性。就用的微软的。
      

  6.   

    另外,我说的顺序是按node.previous, node.next定位节点得到的顺序。不知我们说的是不是一回事?
      

  7.   


                With tvw
                    .LineStyle = tvwTreeLines
                    .Scroll = True
                    .SingleSel = True
                    .Style = tvwTreelinesPlusMinusPictureText
                    .Sorted = True
                End With
                Dim o As Object
                
                With tvw
                    Set o = .Nodes.Add(, tvwFirst, "a", "根节点")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "aa", "1")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "aaa", "3")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "aaaa", "2")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "aaaaa", "4")
                    o.Sorted = True
                End With
    你试试这个看看'那个网页Service Unavailable
      

  8.   

    我用的是:Microsoft Treeview Control, version 6.0我们说的是同一个控件不?是同一个版本不?
      

  9.   

    另外,回8楼,这不是我要问的问题。我的问题是在没有sorted的情况下,只用tvwChild参数,系统是按什么规律插入新节点的。是插在lastsibling? firstsibling? 按字母序?还是随机?老张测的是lastsibling我测的是按字母序
      

  10.   

    奋特。这几天烦我的BUG,就是因为我想当然地以为新插的节点是lastsibling导致的。
      

  11.   

    对了,那你测试的时候,tvw.Sorted = True么?
      

  12.   


    private sub Init_Form_Load
                With tvw
                    .LineStyle = tvwTreeLines
                    .Scroll = True
                    .SingleSel = True
                    .Style = tvwTreelinesPlusMinusPictureText
                    .Sorted = True
                End With
    end sub
    private ubInit_Ctrl()
                Dim o As Object
                
                With tvw
                    Set o = .Nodes.Add(, tvwFirst, "a", "根节点")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "aa", "1")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "aaa", "3")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "aaaa", "2")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "aaaaa", "4")
                    o.Sorted = True
                End With
    set o = nothing
    end sub我刚才那会写的代码
      

  13.   

    你这样sort相当于没sort            With tvw
                    Set o = .Nodes.Add(, tvwFirst, "a", "根节点")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "ba", "1")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "baa", "3")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "baaa", "2")
                    o.Sorted = True
                    Set o = .Nodes.Add("a", tvwChild, "aaaaa", "4")
                    o.Sorted = True
                End With这样“aaaaa”还在最后么?
      

  14.   

    呵呵。我看错了,第4个参数才是text
    .你的代码在我这里出来的结果是按字母序的
      

  15.   

    谢谢AisaC、SYSSZ的指点。我把讨论结果小结在这个帖子里了,打开可能有点慢。