0% found this document useful (0 votes)
67 views

TreeView Drag N Drop

This document provides code for implementing drag and drop functionality in a TreeView control in C#. It includes event handlers for when an item drag begins (ItemDrag), while dragging over the control (DragEnter), and when dropped (DragDrop). The DragDrop handler copies the dragged node, inserts it above or below the drop target node, and removes the original node.

Uploaded by

vipuljoshi002
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
67 views

TreeView Drag N Drop

This document provides code for implementing drag and drop functionality in a TreeView control in C#. It includes event handlers for when an item drag begins (ItemDrag), while dragging over the control (DragEnter), and when dropped (DragDrop). The DragDrop handler copies the dragged node, inserts it above or below the drop target node, and removes the original node.

Uploaded by

vipuljoshi002
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

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

0 738 Rate this snippet!

Add Comment
Views: 32,963

Language: C#

Last Modified: December 4, 2006

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.

private TreeNode sourceNode;

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

// where you can perform any tracking, or validate if the drag

// operation should occur, and so on.

private void myTree_ItemDrag(object sender, ItemDragEventArgs e)

sourceNode = (TreeNode) e.Item;

DoDragDrop(e.Item.ToString(), DragDropEffects.Move | DragDropEffects.Copy);

// Define the event that occurs while the dragging happens

private void myTree_DragEnter(object sender, DragEventArgs e)

if (e.Data.GetDataPresent(DataFormats.Text))

e.Effect = DragDropEffects.Move;

else

e.Effect = DragDropEffects.None;

// Determine what node in the tree we are dropping on to (target),


// copy the drag source (sourceNode), make the new node and delete

// the old one.

private void myTree_DragDrop(object sender, DragEventArgs e)

Point pos = myTree.PointToClient(new Point(e.X, e.Y));

TreeNode targetNode = myTree.GetNodeAt(pos);

TreeNode nodeCopy;

if (targetNode != null)

nodeCopy = new TreeNode(sourceNode.Text, sourceNode.ImageIndex,


sourceNode.SelectedImageIndex);

if (sourceNode.Index > targetNode.Index)

targetNode.Parent.Nodes.Insert(targetNode.Index, nodeCopy);

else

targetNode.Parent.Nodes.Insert(targetNode.Index + 1, nodeCopy);

sourceNode.Remove();

myTree.Invalidate();

You might also like