TreeView拖拽节点改变节点顺序

TreeView拖拽节点改变节点顺序

代码如下:

 private void treeView2_ItemDrag(object sender, ItemDragEventArgs e)
        { 
        	//文件夹不允许移动,只能移动表格,我在表格节点的TreeNode.ToolTipText中添加了表格信息,作为区分,当然也可以判定节点的TreeNode.Nodes.Count==0 来判断
            if ((e.Item as TreeNode).ToolTipText == null || (e.Item as TreeNode).ToolTipText == "")
            { 
                MessageBox.Show("该文件夹不允许移动,请选择工程编辑目录表格!", "提示");
                return;
            }
            //开始进行拖放操作,将节点信息储存并将拖放的效果设置成移动
            this.DoDragDrop(e.Item, DragDropEffects.Move);
        }

        private void treeView2_DragEnter(object sender, DragEventArgs e)
        { 
            //检测储存的在拖放数据中的数据是否是你要,判断数据类型,如果是就将拖放的效果设置成移动,不是则不再进行拖放操作
            if (e.Data.GetDataPresent(typeof(TreeNode)))
            { 
                e.Effect = DragDropEffects.Move;
            }
            else
            { 
                e.Effect = DragDropEffects.None;
            }
        }
        private void treeView2_DragDrop(object sender, DragEventArgs e)
        { 

            Point Position = new Point(0, 0);//用于检索二位平面中的节点
            TreeNode myNode = null;//用于储存拖放数据中的数据
            if (e.Data.GetDataPresent(typeof(TreeNode)))
            { 
                myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));//得到数据
            }
            else
            { 
                MessageBox.Show("当前操作错误!");
            }
            Position.X = e.X;
            Position.Y = e.Y;
            Position = treeView2.PointToClient(Position);
            TreeNode DropNode = this.treeView2.GetNodeAt(Position);//得到目标节点
            //1.目标节点不是空 2.目标节点和被拖拽节点是同一父节点 3.目标节点不是被拖拽节点本身
            if (DropNode != null && DropNode.Parent == myNode.Parent && DropNode != myNode)
            { 
                TreeNode DragNode = myNode;
                int index = DropNode.Index;//获取目标节点的index值,用于插入被拖拽节点
                //将被拖拽节点从原来位置删除
                myNode.Remove();
                //将被拖拽节点插入到目标节点位置
                DropNode.Parent.Nodes.Insert(index, DragNode);
                this.treeView2.SelectedNode = DragNode;
                ///
                /*如果需要修改数据库可在此添加数据修改方法*/
                ///
            }
            else if (DropNode.Parent != myNode.Parent)
            { 
                MessageBox.Show("表格'" + myNode.Text + "'不是'" + DropNode.Parent.Text + "'类型的表格,不能进行拖拽","提示");
            }
        }
    原文作者:格子衫和及腰发
    原文地址: https://blog.csdn.net/qq_37715424/article/details/102800044
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞