原:TreeView节点自由拖动

Public   Class Form1
    
Private Sub Form1_Load(ByVal sender As System.Object, _
                            
ByVal e As System.EventArgs) Handles MyBase.Load
        
Dim ParentNode1 As TreeNode
        
Dim ParentNode2 As TreeNode
        ParentNode1 
= TreeView1.Nodes.Add("tv1")
        
With ParentNode1
            .Nodes.Add(
"tv1FirstChild")
            .Nodes.Add(
"tv1SecondChild")
            .Nodes.Add(
"tv1ThirdChild")
            .Nodes.Add(
"tv1FourthChild")
            .Expand()
        
End With
        ParentNode2 
= TreeView1.Nodes.Add("tv2")
        
With ParentNode2
            .Nodes.Add(
"tv2FirstChild")
            .Nodes.Add(
"tv2SecondChild")
            .Expand()
        
End With
    
End Sub

    
Public Sub TreeView_ItemDrag(ByVal sender As Object, _
                                   
ByVal e As ItemDragEventArgs) _
                                   
Handles TreeView1.ItemDrag
        DoDragDrop(e.Item, DragDropEffects.Move)
    
End Sub

    
Public Sub TreeView_DragEnter(ByVal sender As Object, _
                                  
ByVal e As DragEventArgs) _
                                  
Handles TreeView1.DragEnter
        e.Effect 
= DragDropEffects.Move
    
End Sub

    
Public Sub TreeView_DragDrop(ByVal sender As Object, _
                                  
ByVal e As DragEventArgs) _
                                  
Handles TreeView1.DragDrop
        
Dim NewNode As TreeNode
        
Dim DestinationNode As TreeNode

        
If e.Data.GetDataPresent("System.Windows.Forms.TreeNode"FalseThen
            
Dim pt As Point
            pt 
= CType(sender, TreeView).PointToClient(New Point(e.X, e.Y))

            DestinationNode 
= CType(sender, TreeView).GetNodeAt(pt)
            NewNode 
= CType(e.Data.GetData("System.Windows.Forms.TreeNode"), _
                                            TreeNode)

            
If DestinationNode.Nodes.Count > 0 Then   '目标是目录
                DestinationNode.Nodes.Add(NewNode.Clone)
                DestinationNode.Expand()
                NewNode.Remove()
            
Else  '目标不是目录
                If DestinationNode.Parent Is NewNode.Parent Then  '同级
                    If DestinationNode.Index < NewNode.Index Then
                        DestinationNode.Parent.Nodes.Insert(DestinationNode.Index, NewNode.Clone)
                        NewNode.Remove()
                    
Else
                        DestinationNode.Parent.Nodes.Insert(DestinationNode.Index 
+ 1, NewNode.Clone)
                        NewNode.Remove()
                    
End If
                
ElseIf Not DestinationNode.Parent Is Nothing Then 'Or NewNode.Parent.Parent Is DestinationNode.Parent Then
                    DestinationNode.Parent.Nodes.Insert(DestinationNode.Index, NewNode.Clone)
                    NewNode.Remove()
                
End If
            
End If
        
End If
    
End Sub


End Class

你可能感兴趣的:(treeview)