NodeRelation




Function GetNodeRelationship(ByVal Node1 As Node, _
ByVal Node2 As Node) As Integer

If Node1 Is Node2 Then
' this is the simplest case

Exit Function
ElseIf Len(Node1.FullPath) > Len(Node2.FullPath) Then
' if the two nodes belong to the same subtree, then

' Node1 is a (grand)child of Node2

If InStr(Node1.FullPath, Node2.FullPath) = 1 Then
' do the loop only if the two nodes appear to

' belong to the same subtree

' check that the relationship really exists

Do Until (Node1.Parent Is Nothing)
Set Node1 = Node1.Parent
GetNodeRelationship = GetNodeRelationship + 1
If Node1 Is Node2 Then Exit Function
Loop
End If
Else
' if the two nodes belong to the same subtree, then

' Node1 is a (grand)parent of Node2

If InStr(Node2.FullPath, Node1.FullPath) = 1 Then
' do the loop only if the two nodes appear to

' belong to the same subtree

' check that the relationship really exists

Do Until (Node2.Parent Is Nothing)
Set Node2 = Node2.Parent
GetNodeRelationship = GetNodeRelationship - 1
If Node1 Is Node2 Then Exit Function
Loop
End If
End If

' Nodes belong to different subtrees

GetNodeRelationship = 0

End Function

Returns a value >0 if Node1 is a parent (or grandparent)
of Node2 Returns a value <0 if Node1 is a child
(or grandchild) of Node2 in both cases the number reflects
the number of levels between the two nodes Returns 0 if the
two Nodes are the same or if they belong to different
subtrees










( noderelation.html )- by Paolo Puglisi - Modifica del 17/12/2023