.net C# Treeview的Node拖动,Node节点上下移动

定义一个TreeView 名字为TVdepartment,设置allowdrop为True

//移动代码                                                                            
                                                                                      
private void MiMoveUp_Click(object sender, EventArgs e) //向上移动                    
{                                                                                       
    TreeNode Node = TVdepartment.SelectedNode;                                        
    TreeNode PrevNode = Node.PrevNode;                                                
    if (PrevNode != null)                                                             
    {                                                                                 
                                                                                      
        TreeNode NewNode = (TreeNode)Node.Clone();                                    
        if (Node.Parent == null)                                                      
        {                                                                             
            TVdepartment.Nodes.Insert(PrevNode.Index, NewNode);                       
        }                                                                             
        else                                                                          
        {                                                                             
            Node.Parent.Nodes.Insert(PrevNode.Index, NewNode);                        
        }                                                                             
        Node.Remove();                                                                
        TVdepartment.SelectedNode = NewNode;                                          
                                                                                      
                                                                                      
    }                                                                                 
                                                                                      
                                                                                      
}                                                                                     
private void MiMoveDown_Click(object sender, EventArgs e)//向下移动                   
{                                                                                                     
    TreeNode Node = TVdepartment.SelectedNode;                                        
    TreeNode NextNode = Node.NextNode;                                                
    if (NextNode != null)                                                             
    {                                                                                 
                                                                                      
        TreeNode NewNode = (TreeNode)Node.Clone();                                    
        if (Node.Parent == null)                                                      
        {                                                                             
            TVdepartment.Nodes.Insert(NextNode.Index + 1, NewNode);                   
        }                                                                             
        else                                                                          
        {                                                                             
            Node.Parent.Nodes.Insert(NextNode.Index + 1, NewNode);                    
        }                                                                             
        Node.Remove();                                                                
        TVdepartment.SelectedNode = NewNode;                                          
                                                                                      
                                                                                      
    }                                                                                 
}                                                                                     
//拖动代码                                                                            
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();                                                                                                                                                                     
}                                                                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值