winform 两个TreeView间拖拽节点

http://www.cnblogs.com/rogation/p/3362920.html

       /// <summary>
        /// 正在拖拽的节点
        /// </summary>
        private TreeNode DragNode = null;
        /// <summary>
        /// 节点来源
        /// </summary>
        private TreeView NodeSource = null;
        /// <summary>
        /// 树形节点移动方向
        /// </summary>
        private MoveTreeView MoveTo = MoveTreeView.NoMove;

        /// <summary>
        /// 当鼠标拖拽某相进入控件区域内时
        /// </summary>
        private void TreeView_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        /// <summary>
        /// 当鼠标拖拽某节点时(两个控件的该事件都指向这个方法)
        /// </summary>
        private void TreeView_ItemDrag(object sender, ItemDragEventArgs e)
        {
            if (e.Item is TreeNode && e.Button == System.Windows.Forms.MouseButtons.Left &&
                e.Item != null && sender is TreeView)
            {
                TreeView trv = sender as TreeView;
                TreeNode node = e.Item as TreeNode;
                if (node.Parent != null && trv.Tag != null)
                {
                    int value = Convert.ToInt32(trv.Tag);
                    MoveTo = (MoveTreeView)value;
                    DragNode = node;
                    NodeSource = trv;
                    trv.DoDragDrop(node, DragDropEffects.Move);
                }
            }
        }

        /// <summary>
        /// 拖拽完成时发生的事件(两个控件的该事件都指向这个方法)
        /// </summary>
        private void TreeView_DragDrop(object sender, DragEventArgs e)
        {
            if (sender != null && sender is TreeView)
            {
                TreeView trv = sender as TreeView;
                if (trv.Tag != null)
                {
                    MoveTreeView move = (MoveTreeView)Convert.ToInt32(trv.Tag);
                    if (move == MoveTo) { DragNode = null; NodeSource = null; }
                    else
                    {
                        Point p = trv.PointToClient(new Point(e.X, e.Y));
                        TreeNode node = trv.GetNodeAt(p);
                        string path = GetClientPath(DragNode, DragNode.Text);
                        NodeSource.Nodes.Remove(DragNode);
                        node.Nodes.Add(DragNode);
                    }
                }
            }
        }

        /// <summary>
        /// 属性节点移动方向
        /// </summary>
        public enum MoveTreeView
        {
            /// <summary>
            /// 未移动
            /// </summary>
            NoMove = -1,
            /// <summary>
            /// 上传(客户端拖拽到服务器端)
            /// </summary>
            ClientToServer = 0,
            /// <summary>
            /// 下载(服务器端拖拽到客户端)
            /// </summary>
            ServerToClient = 1
        }
复制代码

首先要将 TreeView 控件的 AllowDrop 属性置为 True


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值