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.
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.