Hola SpeedCAD.
El ejemplo siguiente muestra cómo hacer una operación de arrastre de forma manual. El código por si solo no tiene mucho sentido, pero ya lo completarás tu adaptándolo a tus necesidades. Ahí va:
En un Form añado un ListBox y un TreeView a los que pongo la propiedad
DragMode y OLEDropMode , respectivamente, como manual.
********************************************
Option Explicit
Private indDrag As Boolean
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
If indDrag Then
indDrag = False
List1.Drag vbCancel
End If
End Sub
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If List1.ListIndex > -1 Then indDrag = True
End Sub
Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
indDrag = False
List1.Drag vbCancel
End Sub
Private Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Not indDrag Then Exit Sub
If Button = 1 Then List1.Drag vbBeginDrag
End Sub
Private Sub TreeView1_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
If Source.Name <> "List1" Then Exit Sub
End Sub
Private Sub TreeView1_DragDrop(Source As Control, X As Single, Y As Single)
If Source.Name <> "List1" Then Exit Sub
TreeView1.Nodes.Add , , , Source.List(Source.ListIndex)
List1.Drag vbEndDrag
indDrag = False
End Sub
*********************************************
Ten encuenta detalles como definir el icono para el arrastre (propiedad DragIcon), controlar el arrastre sobre otros controles, ver sobre qué nodos permites colocar y cambiar de icono según se permita o no, etc.
Otra forma de realizar una operación de arrastrar/colocar es de forma automática.
Espero que todo esto te sea de utilidad.
Suerte.