private int draptype=1;//1:不同级, 不为1:拖同级private void treeView1_ItemDrag(object sender, ItemDragEventArgs e){if (e.Button == MouseButtons.Left){DoDragDrop(e.Item, DragDropEffects.Move);}}private void treeView1_DragEnter(object sender, DragEventArgs e){if (e.Data.GetDataPresent(typeof(TreeNode)))e.Effect = DragDropEffects.Move;elsee.Effect = DragDropEffects.None;}private void treeView1_DragDrop(object sender, DragEventArgs e){//获得拖放中的节点TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");//根据鼠标坐标确定要移动到的目标节点Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));TreeNode targetNode = treeView1.GetNodeAt(pt);//如果目标节点为分组则添加到下级节点的未端,如果目标节点为素材文件则添加为同级节点TreeNode NewMoveNode = (TreeNode)moveNode.Clone();if (draptype == 1){targetNode.Nodes.Insert(targetNode.Nodes.Count, NewMoveNode);}else{if (moveNode.NextNode == targetNode){targetNode.Parent.Nodes.Insert(targetNode.Index + 1, NewMoveNode);}else{targetNode.Parent.Nodes.Insert(targetNode.Index, NewMoveNode);}}//更新当前拖动的节点选择treeView1.SelectedNode = NewMoveNode;//展开目标节点,便于显示拖放效果
targetNode.Expand();//移除拖放的节点
moveNode.Remove();}