Déplacer des nodes dans un treeview

Description

Ce petit bout de code permet de déplacer les nodes à l'intérieur d'un Treeview. J'ai réalisé ce code car j'en avait besoins... je désire donc le partager avec vous. Évidement, si jamais il y a une autre méthode plus "officielle", dîtes-moi le.

LIMITE :
Les sous-nodes des nodes déplacées sont transférées mais pas les sous-nodes de sous-nodes des nodes à tranférer.

Source / Exemple :


'/--------------------------------------------------'|>>Fait Par DeadlyPredator, Lundi le 27 Juin 2004<<|
'\--------------------------------------------------/
Public Enum NodeMoveType
NodeMoveChild = 0
NodeMoveParent = 1
NodeMoveFirst = 2
NodeMoveLast = 3
NodeMovePrevious = 4
NodeMoveNext = 5
End Enum
Public Sub NodeMove(ByVal TreeView As TreeView, ByVal SrcNode As Node, ByVal RefNode As Node, Optional ByVal RelationShip As NodeMoveType = NodeMoveFirst, Optional ByVal SelectNode As Boolean = True)
On Error Resume Next
Dim NewNode As Node, i As Long, Children As Collection

    If (SrcNode.Index = RefNode.Index) And (RelationShip = NodeMoveChild Or RelationShip = NodeMoveParent) Then Exit Sub 'LA NODE SE SUPPRIMERAIT...
    
    Select Case RelationShip
    Case 0 'NodeMoveChild
    Set NewNode = TreeView.Nodes.Add(RefNode.Index, tvwChild)
    Case 1 'NodeMoveParent
    Set NewNode = TreeView.Nodes.Add(RefNode.Parent.Index, tvwNext)
    Case 2 'NodeMoveFirst
    Set NewNode = TreeView.Nodes.Add(RefNode.FirstSibling.Index, tvwFirst)
    Case 3 'NodeMoveLast
    Set NewNode = TreeView.Nodes.Add(RefNode.LastSibling.Index, tvwLast)
    Case 4 'NodeMovePrevious
    Set NewNode = TreeView.Nodes.Add(RefNode.Previous.Index, tvwPrevious)
    Case 5 'NodeMoveNext
    Set NewNode = TreeView.Nodes.Add(RefNode.Next.Index, tvwNext)
    Case Else
    Exit Sub
    End Select
    
If Err.Number <> 0 Then Err.Clear: Exit Sub

    With NewNode
    .BackColor = SrcNode.BackColor
    .Bold = SrcNode.Bold
    .Checked = SrcNode.Checked
    .Expanded = SrcNode.Expanded
    .ExpandedImage = SrcNode.ExpandedImage
    .ForeColor = SrcNode.ForeColor
    .Image = SrcNode.Image
    .Key = SrcNode.Key
    .Sorted = SrcNode.Sorted
    .SelectedImage = SrcNode.SelectedImage
    .Tag = SrcNode.Tag
    .Text = SrcNode.Text
    End With

If SrcNode.Children <> 0 Then

Set Children = New Collection

    For i = SrcNode.Child.Index To SrcNode.Child.Index + SrcNode.Children - 1
    Children.Add TreeView.Nodes.Item(i)
    Next
    
TreeView.Nodes.Remove SrcNode.Index

    For i = 1 To Children.Count
    NodeMove TreeView, Children.Item(i), NewNode, NodeMoveChild, False
    Next
    
Set Children = Nothing

Else

TreeView.Nodes.Remove SrcNode.Index

End If

If SelectNode = True Then Set TreeView.SelectedItem = NewNode

Set NewNode = Nothing
End Sub

Conclusion :


Un peu complexe quand même. Avec ça, on voit la base des TreeViews aussi.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.