Я решил это, сохранив ключи и текст моих узлов во временных переменных, очистив ключи и затем переключив их.
На этом этапе я перебираю все дочерние элементы идобавить их в массив узлов.Я установил свойство node.Parent каждого из них на противоположный узел, а затем все это было практически сделано.
Это возможно, потому что данные в таблице зависят от того, как пользователь структурирует древовидную структуру, поэтому, когда у него есть древовидная структура, отображающая, как они этого хотят, я могу сохранить необходимую информацию и перестроить ее, когда они ееконкретная запись резервная копия.Я надеюсь, что это понятно, но у меня есть несколько фрагментов кода ниже, чтобы помочь в этом разобраться.
Private Sub MoveUP()
Dim n As Node
Dim key1 As String
'etc.....
key1 = n.Key
text1 = n.Text
key2 = n.Previous.Key
text2 = n.Previous.Text
'We have to clear out the keys now.
n.Key = ""
n.Previous.Key = ""
'Now replace the keys
n.Key = key2
n.Text = text2
n.Previous.Key = key1
n.Previous.Text = text1
Call SwitchParents(n, n.Previous)
End Sub
^ Приведенный выше код сделан для перемещения n вверх в n.Предыдущее место Следующий код, чтобы переключитьпотомки узлов (если есть)
Private Sub SwitchParents(n1 As Node, n2 As Node)
Dim nds1() As Node 'Declare with no size to ReDim later
Dim nds2() As Node
Dim c As Node 'this is the child node we will use to push into the array
Dim i As Integer
i = n1.Children
ReDim nds1(0 To i)
Set c = n1.Child
'Notice in both loops that i remains the number of children, the arrays fill backwards
'because when you reassign the nodes.Parent property, the node jumps to the beginning,
'so we pack them backwards and they come out displaying the same way they did before.
Do While Not (c Is Nothing)
i = i - 1
Set nds1(i) = c
Set c = c.Next
Loop
i = n2.Children
ReDim nds2(0 To i)
Set c = n2.Child
Do While Not (c Is Nothing)
i = i - 1
Set nds2(i) = c
Set c = c.Next
Loop
If Not IsEmpty(nds1()) Then
For i = 0 To UBound(nds1()) - 1
Set nds1(i).Parent = n2
Next i
End If
If Not IsEmpty(nds2()) Then
For i = 0 To UBound(nds2()) - 1
Set nds2(i).Parent = n1
Next i
End If
End Sub
Надеюсь, этот пример поможет всем, кто имеет похожую двухуровневую древовидную структуру и хочет сделать что-то подобное.Я делаю это по нажатию кнопки, однако это может быть переработано для метода перетаскивания.