实现在TreeView节点中进行拖放操作

private TreeNode oldenterNode;
        private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            //启动拖放操作, 设置拖放类型为MOVE移动
            DoDragDrop(e.Item, DragDropEffects.Move);
        }

        //保存前一个鼠标进入的TreeNode
        private void treeView1_DragEnter(object sender, DragEventArgs e)
        {
            //获取TreeNode类型的数据内容.
            object data = e.Data.GetData(typeof(TreeNode));
            //如果有数据拖放时不允许旋转
            if (data != null)
            {
                e.Effect = DragDropEffects.Move;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
            //获得当前TreeView的引用
            TreeView theTree = (TreeView)sender;
            //得到鼠标进入TreeNode的引用
            TreeNode enterNode = theTree.GetNodeAt(treeView1.PointToClient(new Point (e.X, e.Y)));

            if (enterNode != null)
            {
                //改变进入TreeNode的背景色
                enterNode.BackColor = Color.Blue;
                //保存此TreeNode,进入下一个时还原背景色
                oldenterNode = enterNode;
            }
        }

        private void treeView1_DragOver(object sender, DragEventArgs e)
        {
            //修改鼠标进入TreeNode的背景色,还原上一个TreeNode背景色
            TreeView theTree = (TreeView)sender;
            TreeNode enterNode = theTree.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));

            if ((enterNode != null) && (enterNode != oldenterNode))
            {
                oldenterNode.BackColor = Color.White;
                enterNode.BackColor = Color.Blue;
                oldenterNode = enterNode;
            }
        }

        private void treeView1_DragDrop(object sender, DragEventArgs e)
        {
            //得到拖放数据,并转换为TreeNode型
            TreeNode theNode = (TreeNode)e.Data.GetData(typeof(TreeNode));
            TreeView theTree = (TreeView)sender;

            //得到鼠标进入TreeNode,而拖放目标TreeNode
            TreeNode targetNode = theTree.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));

            if (targetNode != null)
            {
                TreeNode targetParent = targetNode.Parent;
                //删除拖放的TreeNode
                theNode.Remove();
                //添加到目标TreeView下
                targetNode.Nodes.Add(theNode);
                targetNode.BackColor = Color.White;
                theTree.SelectedNode = targetNode;
            }
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值