C# treeview拖动结点操作(转)

  1. private void TVdepartment_ItemDrag(object sender, ItemDragEventArgs e)//左键拖动  
  2.         {  
  3.             if (e.Button == MouseButtons.Left)  
  4.             {  
  5.                 DoDragDrop(e.Item, DragDropEffects.Move);   
  6.             }  
  7.         }  
  8.  
  9.         private void TVdepartment_DragEnter(object sender, DragEventArgs e)  
  10.         {  
  11.             if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode"))  
  12.             {  
  13.                 e.Effect = DragDropEffects.Move;  
  14.             }  
  15.             else 
  16.             {  
  17.                 e.Effect = DragDropEffects.None;  
  18.             }  
  19.         }  
  20.  
  21.     private void TVdepartment_DragDrop(object sender, DragEventArgs e)//拖动  
  22.         {    //获得拖放中的节点  
  23.             TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");  
  24.             //根据鼠标坐标确定要移动到的目标节点  
  25.             Point pt;  
  26.             TreeNode targeNode;  
  27.             pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));  
  28.             targeNode = this.TVdepartment.GetNodeAt(pt);  
  29.             //添加结点
  30.             TreeNode NewMoveNode = (TreeNode)moveNode.Clone();  
  31.       targeNode.Nodes.Insert(targeNode.Nodes.Count, NewMoveNode);  
  32.  
  33.             //更新当前拖动的节点选择  
  34.             TVdepartment.SelectedNode = NewMoveNode;  
  35.             //展开目标节点,便于显示拖放效果  
  36.             targeNode.Expand();  
  37.  
  38.             //移除拖放的节点  
  39.             moveNode.Remove();  
  40.         }

  注意:别忘记把TreeView控件的AllowDrop属性设为true



posted @ 2010-01-20 15:43  eric_lgf  阅读(1271)  评论(0编辑  收藏  举报