Here are some VB.Net code snippets to handle the DragEnter, ItemDrag and DragDrop events that provide a solution to this problem. You can get C# code in this sample, TreeViewDnD. Here is some sample handlers.
private void treeView2_DragDrop( object sender, DragEventArgs e )
{
if ( e.Data.GetDataPresent( "System.Windows.Forms.TreeNode", false ) )
{
Point pt = treeView2.PointToClient( new Point( e.X, e.Y ) );
TreeNode destinationNode = treeView2.GetNodeAt( pt );
TreeNode newNode =
(TreeNode) e.Data.GetData( "System.Windows.Forms.TreeNode" );
if( !destinationNode.Equals( newNode ) )
{
destinationNode.Nodes.Add( (TreeNode) newNode.Clone() );
destinationNode.Expand();
newNode.Remove();
}
}
}
private void treeView2_DragEnter( object sender, DragEventArgs e )
{
e.Effect = DragDropEffects.Move;
}
private void treeView2_ItemDrag(object sender, ItemDragEventArgs e )
{
DoDragDrop( e.Item, DragDropEffects.Move );
}
Brian Roder, Microsoft