目录树节点的拖动

 

 /// <summary>
        ///树节点拖动后事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tvOrgnization_DragDrop(object sender, DragEventArgs e)
        {

           // 验证所选控件是否为TreeNode
            if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode",true) == false)
            {
                return;
            }

            //  获取所在TreeView
            TreeView selectedTreeView = (TreeView)sender;

            //获取要拖动的节点
            TreeNode dropNode  = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");

            //获取选中节点
            TreeNode targetNode= selectedTreeView.SelectedNode;

            if (targetNode == dropNode)
            {
                return;
            }

            //从所在位置移除所要拖动的节点
            dropNode.Remove();

          //将拖动节点移到指定位置
            if( targetNode ==null)
            {         
                selectedTreeView.Nodes.Add(dropNode);
            }
            else
            {
                targetNode.Nodes.Add(dropNode);
            }

            //确保节点可视
            dropNode.EnsureVisible();
            selectedTreeView.SelectedNode = dropNode;
        }

        /// <summary>
        ///拖入控件边界时事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tvOrgnization_DragEnter(object sender, DragEventArgs e)
        {
            if( e.Data.GetDataPresent("System.Windows.Forms.TreeNode",true) )
            {
                //将拖动源数据放到拖动目标
                e.Effect = DragDropEffects.Move;
            }
            else
            {
          // 放置目标不接受该数据
                e.Effect = DragDropEffects.None;
            }
        }

        /// <summary>
        ///开始拖动事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tvOrgnization_ItemDrag(object sender, ItemDragEventArgs e)
        { 
            tvOrgnization.DoDragDrop(e.Item, DragDropEffects.Move);
        }

        /// <summary>
        ///拖出控件边界时事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tvOrgnization_DragOver(object sender, DragEventArgs e)
        {
            if( e.Data.GetDataPresent("System.Windows.Forms.TreeNode",true) == false)
            {
                return;
            }

       // 获取treeview
            TreeView selectedTreeView =  (TreeView)sender;

       //将屏幕位置装换为工区位置
            Point pt  = selectedTreeView.PointToClient(new Point(e.X, e.Y));
            TreeNode targetNode  = selectedTreeView.GetNodeAt(pt);

       //验证targetNode是否为当前选中节点
            if (selectedTreeView.SelectedNode != targetNode )
            {
           
           //不是则将当前选中节点设为targerNode
                selectedTreeView.SelectedNode = targetNode;

            //若目标节点为拖动节点时,不显示拖放效果
                TreeNode dropNode  =(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");

                while (targetNode != null)
                {
                    if (targetNode == dropNode)
                    {
                        e.Effect = DragDropEffects.None;
                    }
                    targetNode = targetNode.Parent;
                }
                e.Effect = DragDropEffects.Move;
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值