C#TreeView节点拖拽

C# 专栏收录该内容
7 篇文章 0 订阅
要实现TreeView的拖拽功能,首先我们必须将其AllowDrop属性设成true,这样就保证了此TreeView的接点是可以被拖拽的。接下来我们为TreeView添加3个事件,它们分别是1.ItemDrag事件(当用户开始拖动节点时发生。)2.DragEnter事件(在将对象拖入控件的边界时发生。)3.DragDrop事件(在完成拖放操作时发生。)

    在拖拽时要注意的是:1.目标节点不能为空。2.目标节点不能被拖拽节点本身。3.目标节点不能是被拖拽节点的字节。以下是3个事件的代码


        /// <拖拽节点>
        /// 拖拽节点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private Point Position = new Point(0, 0);
        String treeNodeText;
        String CurrenttreeNodeText;
        private void treeView1_DragDrop(object sender, DragEventArgs e)
        {
            TreeNode myNode = null;
            if (e.Data.GetDataPresent(typeof(TreeNode)))
            {
                myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
                treeNodeText = myNode.Parent.Parent.Text + myNode.Parent.Text + myNode.Text;
            }
            else
            {
                MessageBox.Show("当前操作错误!");
            }
            Position.X = e.X;
            Position.Y = e.Y;
            Position = treeView1.PointToClient(Position);
            TreeNode DropNode = this.treeView1.GetNodeAt(Position);
            //1.目标节点不是空 2.目标节点不是被拖拽节点的子节点 3.目标节点不是被拖拽节点本身
            if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode)
            {
                TreeNode DragNode = myNode;
                //将被拖拽节点从原来位置删除
                myNode.Remove();
                //在目标节点下增加被拖拽节点
                DropNode.Nodes.Add(DragNode);
                this.treeView1.SelectedNode = DragNode;


                CurrenttreeNodeText = treeView1.SelectedNode.Parent.Parent.Text + treeView1.SelectedNode.Parent.Text + this.treeView1.SelectedNode.Text;
                HelpMySQL hm = new HelpMySQL();
                bool update = hm.updateDB(treeNodeText, CurrenttreeNodeText);
                if (update)
                {
                    byte[] CadByteResulet = new byte[100];
                    byte[] ProByteResulet = new byte[100];
                    hm.CadSearchQuery(CadByteResulet, CurrenttreeNodeText);
                    hm.ProSearchQuery(ProByteResulet, CurrenttreeNodeText);
                }
            }


            //如果目标节点不存在,即拖拽的位置不存在节点,那么久将被拖拽节点放在根节点之下
            if (DropNode == null)
            {
                TreeNode DragNode = myNode;
                myNode.Remove();
                this.treeView1.Nodes.Add(DragNode);
            }
        }
        private void treeView1_DragEnter(object sender, DragEventArgs e)
        {
            //拖动效果设成移动
            if (e.Data.GetDataPresent(typeof(TreeNode)))
            {
                e.Effect = DragDropEffects.Move;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }
        private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            //开始进行拖放操作,并将拖放的效果设置成移动
            this.DoDragDrop(e.Item, DragDropEffects.Move);
        }


  • 0
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值