天天看點

c# 實作滑鼠拖動TreeView節點

private void TVdepartment_ItemDrag(object sender, ItemDragEventArgs e)//左鍵拖動

        {

            if (e.Button == MouseButtons.Left)

            {

                DoDragDrop(e.Item, DragDropEffects.Move); 

            }

        }

        private void TVdepartment_DragEnter(object sender, DragEventArgs e)

        {

            if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode"))

            {

                e.Effect = DragDropEffects.Move;

            }

            else

            {

                e.Effect = DragDropEffects.None;

            }

        }

    private void TVdepartment_DragDrop(object sender, DragEventArgs e)//拖動

        {    //獲得拖放中的節點

            TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");

            //根據滑鼠坐标确定要移動到的目标節點

            Point pt;

            TreeNode targeNode;

            pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));

            targeNode = this.TVdepartment.GetNodeAt(pt);

            //如果目标節點無子節點則添加為同級節點,反之添加到下級節點的未端

            TreeNode NewMoveNode = (TreeNode)moveNode.Clone();

            if (targeNode.Nodes.Count == 0)

            {

                targeNode.Parent.Nodes.Insert(targeNode.Index, NewMoveNode);

            }

            else

            {

                targeNode.Nodes.Insert(targeNode.Nodes.Count, NewMoveNode);

            }

            //更新目前拖動的節點選擇

            TVdepartment.SelectedNode = NewMoveNode;

            //展開目标節點,便于顯示拖放效果

            targeNode.Expand();

            //移除拖放的節點

            moveNode.Remove();

        }

轉載于:https://www.cnblogs.com/hongzhi/archive/2009/06/26/1511529.html

c#