用搜索好象也不行,因为搜索是全部的东东都搜索。
比如:a-aa-aaa-aaaa
|  |   |
|  |   aab-aaba
|  ab-aba
b-ba-baa
   |
  bb-bba 
比如:
象这样的树图,aaaa是a下面的一个元素,ab也是a下面的一个元素,但aaaa不是ab下的,aab也不是ab下的,aba是ab下的
我要如何来判断它?
就是我想得到以下值:
aaaa与a值为True
aaaa与ab值为False
aba与a为True
aba与b为False
说到底了,就是要判断某一个node是不是在另一个node下面。
因为我需要做这样的事:将一个node移动到另一个node下面。
我发现:我将a移到aaaa下的时候,这个a就完全不见了!包括它后面的所有ch东东。这个的移动理论上它也是相孛的,是一个死循环。因此,我要防止这样的事情发生。所以要有一个判断,这个aaaa是不是a下面的一个元素,如果则提示并不远行,如不是,则运行。

解决方案 »

  1.   


    '测试过程
    Private Sub Form_Load()
        '初始化数据
        TreeView1.Nodes.Add , , "AA", "AA"
        TreeView1.Nodes.Add "AA", 4, "BB", "BB"
        TreeView1.Nodes.Add "BB", 4, "CC", "CC"
        
        TreeView1.Nodes.Add , , "A1", "A1"
        TreeView1.Nodes.Add "A1", 4, "B1", "B1"
        TreeView1.Nodes.Add "B1", 4, "C1", "C1"    '调用函数取得节点对比状态
        MsgBox IsNodeParent(TreeView1.Nodes!AA, TreeView1.Nodes!CC)
        MsgBox IsNodeParent(TreeView1.Nodes!A1, TreeView1.Nodes!CC)
    End Sub'这个是判断字节点是否在指定父节点的函数过程
    Private Function IsNodeParent(PObject As Node, CObject As Node) As Boolean
        Dim IsLoop As Boolean
        Dim TempObject As Node
        Dim ReturnState As Boolean
        Set TempObject = CObject
        If TempObject Is Nothing Then IsNodeParent = False: Exit Function
        
        ReturnState = False
        IsLoop = True
        Do
            If TempObject.Parent Is PObject Then
                ReturnState = True
                IsLoop = False
            Else
                Set TempObject = TempObject.Parent
            End If
            If IsLoop = True Then
                If TempObject Is Nothing Then
                    IsLoop = False
                End If
            End If
        Loop While IsLoop
        IsNodeParent = ReturnState
    End Function