TreeView Drag N Drop
TreeView Drag N Drop
A bit of code which sets up drag and drop in a treeview. This is handy for if you have a list of items that can be sorted by
the user. Here is a bit of code to demonstrate how to do this.
Submitted By: psykoprogrammer
Actions:
Rating: Report Snippet
Add Comment
Views: 32,963
Language: C#
Instructions: First create a new Windows executable project. Drop a TreeView component on the form, and let's name it
'myTree' for this demonstration. Go ahead and populate it with some dummy data; enough data to see the dragging and
dropping in action. You will need a variable global to the form's scope.
This is used to track the item we are dragging in our TreeView. Then define the event handlers listed in the code snippet.
Snippet
1. // The ItemDrag event is called when the item drag begins. Here is
2. // where you can perform any tracking, or validate if the drag
3. // operation should occur, and so on.
4. private void myTree_ItemDrag(object sender, ItemDragEventArgs e)
5. {
6. sourceNode = (TreeNode) e.Item;
7. DoDragDrop(e.Item.ToString(), DragDropEffects.Move | DragDropEffects.Copy);
8. }
9.
10. // Define the event that occurs while the dragging happens
11. private void myTree_DragEnter(object sender, DragEventArgs e)
12. {
13. if (e.Data.GetDataPresent(DataFormats.Text))
14. {
15. e.Effect = DragDropEffects.Move;
16. else
17. e.Effect = DragDropEffects.None;
18. }
19. }
20.
21. // Determine what node in the tree we are dropping on to (target),
22. // copy the drag source (sourceNode), make the new node and delete
23. // the old one.
24. private void myTree_DragDrop(object sender, DragEventArgs e)
25. {
26. Point pos = myTree.PointToClient(new Point(e.X, e.Y));
27. TreeNode targetNode = myTree.GetNodeAt(pos);
28. TreeNode nodeCopy;
29.
30. if (targetNode != null)
31. {
32. nodeCopy = new TreeNode(sourceNode.Text, sourceNode.ImageIndex,
sourceNode.SelectedImageIndex);
33.
34. if (sourceNode.Index > targetNode.Index)
35. targetNode.Parent.Nodes.Insert(targetNode.Index, nodeCopy);
36. else
37. targetNode.Parent.Nodes.Insert(targetNode.Index + 1, nodeCopy);
38.
39. sourceNode.Remove();
40. myTree.Invalidate();
41. }
42. }
Copy and paste:-
// The ItemDrag event is called when the item drag begins. Here is
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
TreeNode nodeCopy;
if (targetNode != null)
targetNode.Parent.Nodes.Insert(targetNode.Index, nodeCopy);
else
targetNode.Parent.Nodes.Insert(targetNode.Index + 1, nodeCopy);
sourceNode.Remove();
myTree.Invalidate();