C#實現樹型結構TreeView節點拖拽的簡單功能(轉)


本文摘抄博客園里面的牛人吉日嘎啦http://www.cnblogs.com/jirigala

 

 例子程序運行效果如何下:

  


  當然在節點拖拽時,需要注意幾個事情:


   1:拖拽時總需要有提示信息比較好,防止誤操作后找不到被托摘到哪里去了。


   2:父親節點總不能拖拽到自己的子節點上,那不是死循環或者亂了輩份了不是?


  為了讓TreeView支持拖拽功能,需要注意以下幾個屬性設置及相應的事件代碼。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 


  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 代碼實現參考如下:

        private  void tvOrganize_ItemDrag( object sender, ItemDragEventArgs e)
        {
             if ( this.permissionEdit)
            {
                 //  開始進行拖放操作,並將拖放的效果設置成移動。
                 this.DoDragDrop(e.Item, DragDropEffects.Move);
            }
        }


         private  void tvOrganize_DragEnter( object sender, DragEventArgs e)
        {
             //  拖動效果設成移動
            e.Effect = DragDropEffects.Move;
        }


         private  void tvOrganize_DragDrop( object sender, DragEventArgs e)
        {
             //  定義一個中間變量
            TreeNode treeNode;
             // 判斷拖動的是否為TreeNode類型,不是的話不予處理
             if (e.Data.GetDataPresent( " System.Windows.Forms.TreeNode "false))
            {
                 //  拖放的目標節點
                TreeNode targetTreeNode;
                 //  獲取當前光標所處的坐標
                
//  定義一個位置點的變量,保存當前光標所處的坐標點
                Point point = ((TreeView)sender).PointToClient( new Point(e.X, e.Y));
                 //  根據坐標點取得處於坐標點位置的節點
                targetTreeNode = ((TreeView)sender).GetNodeAt(point);
                 //  獲取被拖動的節點
                treeNode = (TreeNode)e.Data.GetData( " System.Windows.Forms.TreeNode ");
                 //  判斷拖動的節點與目標節點是否是同一個,同一個不予處理
                 if (BaseInterfaceLogic.TreeNodeCanMoveTo(treeNode, targetTreeNode))
                {
                     if (BaseSystemInfo.ShowInformation)
                    {
                         //  是否移動部門
                         if (MessageBox.Show(AppMessage.Format(AppMessage.MSG0038, treeNode.Text, targetTreeNode.Text), AppMessage.MSG0000, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                        {
                             return;
                        }
                    }
                    ServiceManager.Instance.OrganizeService.MoveTo(UserInfo, treeNode.Tag.ToString(), targetTreeNode.Tag.ToString());
                     //  往目標節點中加入被拖動節點的一份克隆
                    targetTreeNode.Nodes.Add((TreeNode)treeNode.Clone());
                     //  將被拖動的節點移除
                    treeNode.Remove();
                }
            }
        }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM