C#实现TreeView节点拖拽的方法

2019-12-26 13:19:11于丽

易采站长站为您分析C#实现TreeView节点拖拽的方法,涉及C#针对TreeView节点的动态添加及移除技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了C#实现TreeView节点拖拽的方法。。具体如下:

 

  1. public Form1()  { 
  2. InitializeComponent();  treeView1.AllowDrop = true; 
  3. treeView1.ItemDrag += new ItemDragEventHandler(treeView1_ItemDrag);  treeView1.DragEnter += new DragEventHandler(treeView1_DragEnter); 
  4. treeView1.DragDrop += new DragEventHandler(treeView1_DragDrop);  } 
  5. void treeView1_DragDrop(object sender, DragEventArgs e)  { 
  6. TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");  //根据鼠标坐标确定要移动到的目标节点 
  7. Point pt;  TreeNode targeNode; 
  8. pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));  targeNode = this.treeView1.GetNodeAt(pt); 
  9. //如果目标节点无子节点则添加为同级节点,反之添加到下级节点的未端  TreeNode NewMoveNode = (TreeNode)moveNode.Clone(); 
  10. if (targeNode.Nodes.Count == 0)  { 
  11. targeNode.Parent.Nodes.Insert(targeNode.Index, NewMoveNode);  } 
  12. else  { 
  13. targeNode.Nodes.Insert(targeNode.Nodes.Count, NewMoveNode);  } 
  14. //更新当前拖动的节点选择  treeView1.SelectedNode = NewMoveNode; 
  15. //展开目标节点,便于显示拖放效果  targeNode.Expand(); 
  16. //移除拖放的节点  moveNode.Remove(); 
  17. }  void treeView1_DragEnter(object sender, DragEventArgs e) 
  18. {  if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode")) 
  19. {  e.Effect = DragDropEffects.Move; 
  20. }  else 
  21. {  e.Effect = DragDropEffects.None; 
  22. }  } 
  23. void treeView1_ItemDrag(object sender, ItemDragEventArgs e)  { 
  24. if (e.Button == MouseButtons.Left)  { 
  25. DoDragDrop(e.Item, DragDropEffects.Move);  }