Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireFormulairesContrôlesTreeView

En récupérant l'index, vous pouvez repointer le nœud sur lequel vous avez ajouté un fils.
Par exemple, vous êtes sur un nœud, vous stockez son index, vous ajoutez le fils puis vous activez le nœud ainsi :

 
Sélectionnez

oTreeView.Nodes(intOriginalIndex).Selected = True
Créé le 20 novembre 2005  par argyronet
 
Sélectionnez

Dim currentNode As MSComctlLib.node 'parcours du node courant
Dim nbCheckedNodes As Integer

' Pour chaque node contenu dans la collection nodes de l'objet TreeView
For Each currentNode In LeTreeViewDeTonFormulaire.Nodes
    ' Traitement du node courant. Exemple compter les nodes cochés
    If currentNode.Checked Then
        nbCheckedNodes = nbCheckedNodes + 1
    End If
End Sub


Dans cet exemple nous nous contentons de compter le nombre de lignes sélectionnées. Vous pourrez donc facilement imaginer comment procéder à divers traitements sur les lignes qui vous intéressent.

Créé le 20 novembre 2005  par Team Access

Pour cela on peut utiliser une procédure récursive qui remonte l'arbre.

Cette procédure est la suivante :

 
Sélectionnez

Private Sub ChercheGeneration(oNode As Node, intGeneration As Integer)
If Not oNode.Parent Is Nothing Then
  intGeneration = intGeneration + 1
  ' Appeler la procédure pour le parent
  ChercheGeneration oNode.Parent, intGeneration
End If
End Sub

Exemple d'utilisation sur l'événement Double-Clic du TreeView

 
Sélectionnez

Private Sub MonTreeView_DblClick()
Dim Generation As Integer
ChercheGeneration MonTreeView.SelectedItem, Generation
MsgBox Generation
End Sub

Notons que la numérotation commence à zéro.

Créé le 20 novembre 2005  par Tofalu

Ce code permet d'imprimer dans un état le même TreeView de votre formulaire.
Il faut impérativement faire référence à la bibliothèque d'objets de VB6 (VB6.olb) car ce code utilise l'objet Printer.

 
Sélectionnez

Option Compare Database
Option Explicit
 
Const COORDINATE_XY As Integer = 1440
Const TEXT_HEIGHT As Integer = 192
Const OFFSET_TORIGHT As Integer = 256
Const OFFSET_TODOWN As Integer = 128
 
Private Sub cmdPrint_Click()
'***************************************************
' Faire référence à VB6.olb (C:\Program Files\Microsoft Visual Studio\VB98)
'***************************************************
Dim oTreeView As TreeView
 
    Set oTreeView = TreeViewMain.Object
    Printer.CurrentX = COORDINATE_XY
    Printer.CurrentY = COORDINATE_XY
    PrintTreeView oTreeView , Printer, COORDINATE_XY
    Printer.EndDoc
    Set oTreeView = Nothing
    MsgBox "Impression de l'arborescence terminée !", 64
End Sub
 
Private Sub PrintTreeView(ByVal TVWObject As TreeView, ByVal DevicePrinter As Object, DeviceCoordinates As Integer)
Dim oNode As Node
 
  ' Préparation de l'impression du TreeView
  Set oNode = TVWObject.Nodes(1)
  Do Until oNode Is Nothing
      DevicePrinter.CurrentX = DeviceCoordinates
      PrintCurrentNode oNode, DevicePrinter
      Set oNode = oNode.Next
  Loop
  Set oNode = Nothing
End Sub
 
Private Sub PrintCurrentNode(ByVal TVWNode As Node, ByVal DevicePrinter As Printer)
Dim sngNodeChildOffset As Single
Dim sngX1 As Single
Dim sngY1 As Single
Dim sngX2 As Single
Dim sngY2 As Single
Dim sngTreeLineHeight As Single
 
    ' Arboresence...
    With DevicePrinter
      sngNodeChildOffset = .CurrentX + OFFSET_TORIGHT
      sngX1 = .CurrentX + OFFSET_TORIGHT / 2
      sngTreeLineHeight = TEXT_HEIGHT + OFFSET_TODOWN
      Printer.Print TVWNode.Text
      sngY1 = DevicePrinter.CurrentY
    End With
    ' Nœuds enfants
    Set TVWNode = TVWNode.Child
    Do Until TVWNode Is Nothing
        ' Dessine une ligne pour chaque nœud...
        sngX2 = DevicePrinter.CurrentY
        sngY2 = sngX2 + sngTreeLineHeight / 2
        DevicePrinter.Line (sngX1, sngY1)-(sngX1, sngY2)
        DevicePrinter.Line -Step(OFFSET_TORIGHT / 2, 0)
        ' ...de façon recursive
        DevicePrinter.CurrentY = sngX2
        DevicePrinter.CurrentX = sngNodeChildOffset
        PrintCurrentNode TVWNode, DevicePrinter
        Set TVWNode = TVWNode.Next
    Loop
End Sub
Créé le 14 octobre 2007  par argyronet

Ci-joint un code permettant de piloter le clic droit dans un TreeView nommée TV.

 
Sélectionnez
' Si clic à droite + Node visé, appliquer l'effet DropHighlight sur le Node pointé
'
Private Sub TV_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Long, ByVal Y As Long)
 
    ' Il peut n'y avoir aucun objet sous la souris
    If Button = vbKeyRButton Then
        Set TV.DropHighlight = TV.HitTest(X, Y)
    Else
        Set TV.DropHighlight = Nothing
    End If
 
End Sub
 
' Si la souris est déplacée et que le bouton droit n'est pas enfoncé,
' alors annuler l'effet DropHighlight.
'
Private Sub TV_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Long, ByVal Y As Long)
    Screen.MousePointer = 0
    If Not (TV.DropHighlight Is Nothing) And Button <> vbKeyRButton Then
        ' Le Node est "abandonné"
        Set TV.DropHighlight = Nothing
    End If
End Sub
 
' Si Bouton droit est relâché et Node pointé est le même que celui référencé par DropHighLight,
' alors configurer et afficher un menu PopUp.
' Puis annuler l'effet DropHighlight.
'
Private Sub TV_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Long, ByVal Y As Long)
 
    Dim oNode As MSComctlLib.Node, p As Parametrage
    
    If Button = vbKeyRButton Then
        Set oNode = TV.HitTest(X, Y)
 
' Vérifier qu'un Node est effectivement pointé et que c'est celui de l'événement _MouseDown
        If Not (oNode Is Nothing) Then
            If Not (TV.DropHighlight Is Nothing) Then
                If oNode = TV.DropHighlight Then
                    ' Placer ici le code de paramétrage et d'ouverture du menu contextuel
                    ...
                End If
            End If
        End If
    End If
    
    Set TV.DropHighlight = Nothing
End Sub
Créé le 31 mars 2008  par =JBO=
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.