RE:operacion arrastrar y colocar
Entiendo que quiere Arrastrar del treeview y soltar en el mismo Treeview. Si es así debes hacer varias cosas:
1.- En el evento MouseMove del treeview debes disparar el evento DoDragDrop del Treeview. Aquí indicas el objeto que estas moviendo y el efecto deseado (copiar o mover). En este ejemplo movemos la propiedad Text del nodo seleccionado utilizamos el efecto Move (Esto automaticamente manejará los tipos de cursor de acuerdo al efecto escojido).
TreeView1.DoDragDrop(TreeView1.SelectedNode.Text, DragDropEffects.Move)
2.- La propiedad AllowDrop del Treeviewdebes ponerla en true. Esto lo podrías hacer dentro del mismo evento MouseMove.
3.- Debes controlar los eventos DragOver y DragEnter del Treeview. En el DragOver tienes que controlar el nodo donde te encuestras con un código similar a este:
Dim x, y As Integer
x = PointToClient(New Point(e.X, e.Y)).X - TreeView1.Location.X
y = PointToClient(New Point(e.X, e.Y)).Y - TreeView1.Location.Y
mySelectedNode = TreeView1.GetNodeAt(x, y)
If Not (mySelectedNode Is Nothing) Then
Me.TreeView1.SelectedNode = mySelectedNode
Me.TreeView1.SelectedNode.Expand()
Me.TreeView1.Select()
End If
En el Evento DragEnter tienes que indicar los efectos de la accion:
Este código sirve para el caso de arrastrar un texto sobre el trreview. Si arrastras otro tipo de dato tendrás que chequearlo de forma similar.
Private Sub TreeView1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragEnter
If (e.Data.GetDataPresent(DataFormats.Text)) Then
e.Effect = DragDropEffects.Move
Else
e.Effect = DragDropEffects.None
End If
End Sub
Por último en el evento DragDrop del mismo Treeview manejas el efecto de mover o de copiar según halla sido el caso.
Good Luck !!!!!!