Hello All,

i am hoping to get some help with the drag and drop of nodes both parent and children within the same treeview. I have gotten so far, but I am stuggling the below code allows the movement of a node to anywhere but then removes the parent of the moved node, I think its do with the index number of the node??? All help is appreciated.

Private Sub TreeView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
Dim XFactor As Double, YFactor As Double
XFactor = 88
YFactor = 90
' DropHighlight returns a reference to object drop occurred over.
UserForm1.Caption = TreeView1.HitTest((x * (1 + (1 / 3))) * 1440 / XFactor, (y * (1 + (1 / 3))) * 1440 / YFactor)
' To release the DropHighlight reference, set it to Nothing.
' Set TreeView1.DropHighlight = Nothing

Dim sNode As Node
Dim dNode As Node
Dim dNodeKey As String
Dim dNodeTxt As String
Dim newNodeKey As String
Dim newNodeTxt As String

On Error Resume Next
Effect = fmDropEffectMove

Set sNode = TreeView1.SelectedItem
Set dNode = TreeView1.HitTest((x * (1 + (1 / 3))) * 1440 / XFactor, (y * (1 + (1 / 3))) * 1440 / YFactor)

newNodeKey = sNode.Key
newNodeTxt = sNode.Text

Set TreeView1.DropHighlight = dNode

' remove the item from the list
TreeView1.Nodes.Remove sNode.Key

' add the new item using the [After] param to place the item where
'we want to
TreeView1.Nodes.Add "Root", tvwChild, sNodePar, newNodeTxt
TreeView1.Nodes.Add dNode.Key, tvwChild, newNodeKey, newNodeTxt
TreeView1.Refresh
MsgBox "Count " & TreeView1.Nodes.Count
End Sub

Private Sub TreeView1_OLEDragOver(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single, State As Integer)
Dim XFactor As Double, YFactor As Double
XFactor = 88
YFactor = 90


Dim nodSelected As Node
Dim nodOver As Node
If TreeView1.SelectedItem Is Nothing Then
Set nodSelected = TreeView1.HitTest((x * (1 + (1 / 3))) * 1440 / XFactor, (y * (1 + (1 / 3))) * 1440 / YFactor)
If Not nodSelected Is Nothing Then
nodSelected.Selected = True
End If
Else
If TreeView1.HitTest((x * (1 + (1 / 3))) * 1440 / XFactor, (y * (1 + (1 / 3))) * 1440 / YFactor) Is Nothing Then
Else
Set nodOver = TreeView1.HitTest((x * (1 + (1 / 3))) * 1440 / XFactor, (y * (1 + (1 / 3))) * 1440 / YFactor)
Set TreeView1.DropHighlight = nodOver
End If
End If

End Sub

Private Sub UserForm_Activate()
'// fill the control with some dummy nodes
With TreeView1.Nodes
.Add , , "Root", "Root Item"
'// add some child folders
.Add "Root", tvwChild, "ChildFolder1", "Child Folder 1"
.Add "Root", tvwChild, "ChildFolder2", "Child Folder 2"
.Add "Root", tvwChild, "ChildFolder3", "Child Folder 3"
'// add some children to the folders
.Add "ChildFolder1", tvwChild, "Child1OfFolder1", "Child 1 Of Folder 1"
.Add "ChildFolder1", tvwChild, "Child2OfFolder1", "Child 2 Of Folder 1"
.Add "ChildFolder2", tvwChild, "Child1OfFolder2", "Child 1 Of Folder 2"
End With

End Sub
'Select the clicked node
Private Sub Treeview1_NodeClick(ByVal Node As MSComctlLib.Node)
Me.lblSpec.Caption = "Moving Node: " & Node.Index
Me.lblText.Caption = Node.Key & ", " & Node.Text
TreeView1.SelectedItem = Node
End Sub