Access
 sql >> Base de données >  >> RDS >> Access

Contrôle de l'arborescence Coche Ajouter Supprimer des nœuds

Introduction.

Dans cet épisode du didacticiel sur le contrôle de l'arborescence, nous apprendrons comment ajouter/supprimer Nœuds. La position de l'élément candidat Ajouter/Supprimer sera cochée, là où nous voulons Ajouter() le nouveau nœud ou à Remove() le nœud marqué. L'ajout du nœud peut être au même niveau que le nœud marqué ou en tant que nœud enfant.

Les sessions de didacticiel TreeView Control jusqu'à présent.

  1. Tutoriel sur le contrôle Microsoft TreeView
  2. Création d'un menu d'accès avec le contrôle TreeView
  3. Affectation d'images au contrôle TreeView
  4. Affectation d'images à TreeView Control-2

La vue normale du contrôle de l'arborescence de démonstration sur le formulaire MS-Access, avec d'autres contrôles, est donnée ci-dessous.

Le tableau de données pour la démo de TreeView Control.

La table avec le nom Sample, nous avons utilisé lors de la première session de didacticiel, nous allons également l'utiliser ici. Il s'agit d'un petit tableau avec des enregistrements de la structure des contrôles de la base de données Access, des tableaux, des formulaires et des rapports, organisés par ordre hiérarchique et faciles à comprendre.

L'identifiant colonne (Arborescence Clé ) est un champ NuméroAuto.

Les nouveaux visiteurs sont mis à jour pour cette session de didacticiel.

Si vous n'avez pas suivi la première session de didacticiel, vous pouvez télécharger la base de données de démonstration à partir de la deuxième page de session :Création d'un menu d'accès avec contrôle de l'arborescence. Il y a une table dans cette base de données avec le nom :Sample et formulaire frmSample . Vous pouvez les importer dans votre base de données actuelle. Il existe un autre formulaire avec le nom frmMenu là-dedans et vous pouvez copier les boutons de commande Développer tout, Tout réduire, et leurs procédures d'événement de clic sur le bouton de commande à partir de frmMenu au frmSample Module de code pour continuer cette session.

Comme je l'ai mentionné précédemment, nous pouvons partager le contrôle ImageList, avec les images téléchargées vers d'autres projets, nous allons faire une copie du contrôle ImageList de la dernière session de didacticiel et l'apporter ici, avec toutes les images téléchargées, et l'utiliser sur le Nœuds de contrôle de l'arborescence sur frmSample .

Importer le contrôle ImageList avec des images.

Vous pouvez importer le contrôle ImageList que vous avez déjà, avec des images téléchargées dans une autre base de données, de la manière suivante :

  1. Importez le formulaire avec le contrôle ImageList dans la base de données active, à partir de la base de données où vous avez le contrôle ImageList avec des images téléchargées manuellement. Copiez et collez le contrôle ImageList dans le formulaire, où vous le souhaitez.

  2. Ou, copiez d'abord le contrôle ImageList dans le presse-papiers, à partir de la base de données, où vous l'avez. Si vous avez téléchargé la base de données de démonstration à partir de la session de didacticiel précédente, vous disposez déjà du contrôle ImageList avec les images téléchargées. Fermez la base de données après avoir copié le contrôle ImageList dans le presse-papiers.

  3. Ouvrez la base de données cible et ouvrez le formulaire où vous voulez le contrôle ImageList et collez-le sur le formulaire.

    Avec les lignes de code suivantes dans CreateTreeView() Sous-routine, vous pouvez passer la référence d'objet ImageList au contrôle de l'arborescence.

    Dim tv As MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListSet tv =Me.TreeView0 .Objecttv.Nodes.ClearSet ImgList =Moi.ImageList0 .Objecttv.ImageList =ImgList 

Modifiez les noms d'objet en surbrillance dans le code, s'ils sont différents sur le formulaire.

Après cela, vous pouvez ajouter les noms de clé d'image dans le TreeView Nodes.Add() les deux derniers paramètres de la méthode.

Nous avons déjà fait ces exercices dans les sessions précédentes. Pour vous rappeler que nous utilisons le contrôle Table et Tree View que nous avons créé lors de la première session de didacticiel et mis en œuvre avec les modifications expliquées ci-dessus.

Affichage des valeurs de propriété des nœuds cochés.

La clé du nœud sélectionné , Clé parentale, et Texte Les propriétés sont affichées dans les zones de texte à droite du contrôle de l'arborescence. La case à cocher avec la légende :nœud enfant, le Supprimer Nœud, et Ajouter un nœud Les boutons de commande sont de nouveaux ajouts au formulaire. Leurs fonctions seront expliquées dans un court instant.

Affichage des cases à cocher sur le contrôle TreeView.

Normalement, la case à cocher n'est pas affichée sur le contrôle TreeView, sauf si nous activons une propriété dans la feuille de propriétés du contrôle TreeView. Il n'a que quelques fonctionnalités limitées ici. Tout ce que nous allons faire ici peut également être fait sans la case à cocher.

Une meilleure approche pour l'utilisation des cases à cocher peut être la préparation d'un rapport sur les succursales sélectionnées des activités de la société, basé sur des choix aléatoires de succursales sélectionnables par l'utilisateur, à partir du menu du projet d'accès.

Ici, l'objectif est de faire connaître cette fonctionnalité et de faire une démonstration de son utilisation.

  1. Ouvrez le formulaire avec le contrôle TreeView en mode Création.
  2. Cliquez avec le bouton droit sur le contrôle TreeView, mettez en surbrillance l'objet TreeCtrl , sélectionnez les Propriétés option pour afficher la feuille de propriétés.
  3. Mettez une coche sur les cases à cocher option sur le contrôle des propriétés, comme indiqué dans l'image ci-dessous.

L'image TreeView de démonstration donnée en haut, Détails.

Voyons ce que nous avons sur le formulaire de démonstration frmSample présenté en haut de cette page. Le contrôle de l'arborescence et les deux boutons de commande supérieurs, Développer tout et Tout réduire, on Click développe ou réduit les nœuds et nous avons vu leurs fonctions dans le dernier épisode.

Sur le côté droit, il y a trois zones de texte, sous l'en-tête Label :Valeurs de propriété , pour afficher la clé du nœud coché , Clé Parentale, et Texte Valeurs.

La suppression de nœud Le bouton de commande supprime le nœud coché ou le nœud et ses nœuds enfants.

Avant de sélectionner le bouton de commande Ajouter un nœud , le Texte La valeur de propriété doit être modifiée pour être remplacée par la nouvelle valeur de texte du nouveau nœud.

Au-dessus de Ajouter un nœud Bouton de commande, il y a une case à cocher avec le libellé Nœud enfant. Le bouton Ajouter un nœud et nœud enfant Les cases à cocher fonctionnent ensemble pour définir la règle, quant à l'endroit où le nouveau nœud doit apparaître.

Comprendre l'action Ajouter un nœud.

Supposons que vous souhaitiez ajouter un nouveau nœud pour Hyperlink champ sous Champs liste de type de données de groupe (ou nœud parent). Regardez l'image de démonstration donnée en haut de cette page, où j'ai coché le champ de date Node, entre autres Child-Nodes. Les feuilles de propriétés du côté droit affichent sa clé :X15 , Clé Parent :X4 &Texte :Champ de date Descriptif.

Modifier le texte :Champ de date vers lien hypertexte dans la zone de texte d'affichage de la propriété et cliquez sur Ajouter un nœud Bouton de commande. La sortie sera comme indiqué ci-dessous :

Si vous cochez les Champs élément de nœud parent et cochez la case Child-Node option, au-dessus de l'option Ajouter un nœud Bouton de commande, vous obtiendrez le même résultat.

Au lieu de cela, si vous conservez la coche du nœud sur le champ de date et cochez la case Child-Node au-dessus de l'option Ajouter un nœud Bouton de commande, vous obtiendrez le résultat comme indiqué ci-dessous.

Le nœud enfant sera créé sous le nœud coché.

Les actions Ajouter un nœud doivent d'abord créer un nouvel enregistrement dans la table sous-jacente.

Un nouvel enregistrement est créé dans l'exemple Tableau, avec le nouveau texte :Hyperlien et ID parent Valeurs. Le champ AutoNumber génère un nouveau numéro et nous le récupérons et l'utilisons comme clé-valeur pour le nœud.

Le code VBA de sous-routine d'ajout de nœud est donné ci-dessous :

Private Sub cmdAdd_Click()Dim strKey As StringDim lngKey As LongDim strParentKey As StringDim lngParentkey As LongDim strText As StringDim lngID As LongDim strIDKey As StringDim childflag As IntegerDim db As DAO.DatabaseDim strSql As StringDim intflag As IntegerDim tmpnode As MSComctlLib.NodeDim i As Integeri =0For Each tmpnode In tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True i =i + 1 End IfNextIf i> 1 Then MsgBox "Noeuds sélectionnés :" &i &vbCr &"Sélectionnez un seul nœud pour marquer l'ajout .", vbCritical, "cmdAdd()" Quitter SubEnd If'Read Property Values ​​from FormstrKey =Trim(Me![TxtKey])lngKey =Val(Mid(strKey, 2))strParentKey =Trim(Me![TxtParent])lngParentkey =IIf(Len(strParentKey)> 0, Val(Mid(strParentKey, 2)), 0)strText =Trim(Me![Text])'Read child Node Option settingchildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID] ) "If lngParentkey =0 And childflag =0 Then 'Add Root-level Node, ParentKey i s Vide strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &" " strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey>=0) And (childflag =True) Then 'Insère un nœud enfant dans le nœud coché, ici Valeur de clé utilisée comme ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) And (childflag =False) Then 'Inserts Node at the check-marked level, Add item under the same ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Obtenir le numéro automatique nouvellement créé à utiliser comme KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error GoTo IdxOutofBoundSelect Case intflag Case 1 'Add Root- level Node, ParentKey is Blank tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Case 2 'Insère un nœud enfant dans le nœud coché, ici la valeur de clé utilisée comme ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Case 3 'Insère un nœud au niveau coché, ajoute un élément sous la même clé parent tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Effacer les valeurs des propriétés du formulaire avec moi 

Examinons le code VBA. Après les déclarations de variables locales, les nœuds TreeView sont analysés à la recherche de coches et prennent un nombre d'éléments cochés. S'il y a plusieurs nœuds cochés, il affiche un message et interrompt le programme.

Remarque : Au lieu de cocher, nous pouvons directement cliquer sur un nœud pour le sélectionner. Dans les deux cas, le nœud coché/cliqué est passé en paramètre à la procédure événementielle. La coche est utile lorsque vous devez sélectionner plusieurs éléments dans un menu de projet, par exemple :pour la sélection d'un ensemble de données différent pour un rapport particulier, etc.

Les valeurs de propriété du nœud coché sont lues à partir des contrôles de formulaire dans strKey , strCléParent, et strText. L'ID, les valeurs numériques ParentID sont extraites et enregistrées dans lngKey et lngParentKey Variables à utiliser dans SQL String.

Ensuite, le nœud enfant La valeur de la case à cocher est enregistrée dans ChildFlag variable.

Trois ensembles différents de chaînes SQL sont créés en fonction du nœud sélectionné et du nœud enfant Case à cocher au-dessus du bouton de commande Ajouter un nœud.

  1. Si ParentID La valeur de la propriété sur le formulaire est vide et le nœud enfant n'est pas cochée, un nouvel enregistrement de niveau racine sera créé car l'utilisateur a coché un nœud de niveau racine.
  2. Si ParentID Valeur de la propriété>=0 et nœud enfant la case est cochée (cochée ), puis un nouvel enregistrement est créé en tant que nœud enfant du nœud coché. La clé du nœud coché (ID) est utilisé comme ParentID sur le nouvel enregistrement pour le nouveau nœud.
  3. Si ParentID Valeur >=0 et nœud enfant case à cocher non sélectionnée (non cochée ) puis le Nouvel Enregistrement est créé pour le nouveau Nœud, au même niveau que le Nœud coché.

Le intFlag La variable est définie avec l'une des trois valeurs :1, 2 ou 3, selon l'exécution de SQL, comme indication du type de nœud à créer sur le contrôle de l'arborescence.

Ensuite, en fonction de la sélection des options, le SQL est exécuté pour créer un nouvel enregistrement sur l'échantillon Table, avec une nouvelle valeur de champ ID NuméroAuto.

Ensuite, le DMax() La fonction renvoie l'ID d'enregistrement unique en tant que valeur-clé pour le nouveau nœud.

En fonction de l'option de type de nœud (1, 2 ou 3), le nœud est créé sur le contrôle de l'arborescence.

Le contenu de la zone de texte d'affichage des propriétés est effacé.


Suppression d'un nœud ou d'un nœud avec des enfants.

Le nœud Supprimer L'option est beaucoup plus facile que l'exercice précédent. Supprime simplement le nœud coché et ses enfants, s'ils sont présents, du contrôle de l'arborescence. Les enregistrements associés sont également supprimés du tableau.

Le code VBA pour la suppression de nœud est donné ci-dessous :

Private Sub cmdDelete_Click()Dim nodId As Long, nodParent As LongDim strSql As StringDim db As DAO.DatabaseDim j As IntegerDim tmpnode As MSComctlLib.NodeDim strKey As StringDim strMsg As Stringj =0 ' Obtenir les nœuds cochés countFor Each tmpnode In tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Noeuds sélectionnés :" &j &vbCr &"Sélectionnez un seul nœud à supprimer." , vbCritical, "cmdDelete()" Exit Sub End IfSet tmpnode =tv.Nodes.Item(strKey)tmpnode.Selected =TrueSet db =CurrentDb'vérifie la présence du ou des nœuds enfants du nœud marquéIf tmpnode.Children> 0 Then' Avertissements : 'La suppression de nœuds au hasard laissera des nœuds orphelins' dans le tableau et entraînera des erreurs lors du prochain processus de chargement de l'arborescence strMsg ="Le nœud marqué a " &tmpnode.Children &" Enfants. " Nœuds enfants aussi ?" Si MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Then 'Vérifier et obtenir une confirmation. strMsg ="Supprimer uniquement l'ensemble le plus profond de nœuds enfants" &vbCr strMsg =strMsg &"et leur nœud parent en même temps." &vbCr &vbCr strMsg =strMsg &"Etes-vous sûr de continuer ..?" Si MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Then Do Until tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Supprimer le nœud enfant tv.Nodes.Remove tmpnode .Child.Index 'Supprime l'enregistrement associé strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql Loop Else Exit Sub End If Else Exit Sub End IfEnd If nodId =Val(Mid(tmpnode.Key, 2)) 'Supprimer le parent tv.Nodes.Remove tmpnode.Key tv.Refresh 'Supprimer l'enregistrement marqué strSql =" DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Effacer les valeurs de propriété du formulaire avec moi .TxtKey ="" .TxtParent ="" .Text ="" End With Set db =Nothing End Sub

Après les déclarations de variables locales, le For Each . . . Suivant La boucle compte les nœuds avec des coches. Si plusieurs éléments cochés sont trouvés, un message s'affiche et le programme est abandonné.

S'il n'y a qu'un seul élément coché, la deuxième étape Vérification de validation recherche la présence de nœud(s) enfant(s) du nœud sélectionné. Si des nœuds enfants sont trouvés, un message s'affiche à cet effet. L'utilisateur doit reconfirmer son intention de supprimer d'abord les nœuds enfants, puis le nœud parent coché.

Remarque : Il est conseillé aux utilisateurs de supprimer d'abord le niveau le plus profond des nœuds enfants, ou tous les nœuds enfants du niveau le plus profond avec leur nœud parent immédiat, en marquant uniquement le nœud parent, sans marquer le nœud grand-parent. Limiter la règle de suppression à ce niveau gardera le Code simple et facile à comprendre. La violation de cette règle peut laisser certains nœuds orphelins et se retrouver avec des erreurs lors de la prochaine ouverture de l'arborescence .

Les nœuds enfants sont supprimés un par un et les enregistrements correspondants de la table sont également supprimés les uns après les autres. Supprime ensuite l'enregistrement parent marqué.

Si le nœud marqué n'a pas de nœud enfant, il est supprimé immédiatement après les vérifications de validation et l'enregistrement de table correspondant est également supprimé.

Le contenu de la zone de texte d'affichage de la propriété sur le formulaire est effacé.


Le code VBA du module de classe complet du formulaire frmSample.

Voici le code VBA complet dans frmSample 's Class Module, avec d'autres petites sous-routines pour développer les nœuds qui s'effondrent, TreeView0_NodeCheck Procédure d'événement, cmdExit Événement de clic sur le bouton de commande, Form_Load() Procédures et CreateTreeView() Sous-programme :

Option Compare DatabaseOption ExplicitDim tv As MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListConst KeyPrfx As String ="X"Private Sub cmdAdd_Click()Dim strKey As StringDim lngKey As LongDim strParentKey As StringDim lngParentkey As LongDim strText As StringDim lngID As LongDim strIDKey As StringDim childflag As IntegerDim db As DAO.DatabaseDim strSql As StringDim intflag As IntegerDim tmpnode As MSComctlLib.NodeDim i As Integeri =0For Each tmpnode In tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True i =i + 1 End IfNextIf i> 1 Puis MsgBox "Nœuds sélectionnés : " &i &vbCr &"Sélectionnez un seul nœud pour marquer l'ajout.", vbCritical, "cmdAdd()" Exit SubEnd If'Read Property Values ​​from FormstrKey =Trim(Me![TxtKey])lngKey =Val(Mid(strKey, 2))strParentKey =Trim(Me![TxtParent])lngParentkey =IIf(Len(strParentKey)> 0, Val(Mid(strParentKey, 2)), 0)strText =Trim(Me![ Texte])'Lire le paramètre d'option de nœud enfantchildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID] ) "If lngParentkey =0 And childflag =0 Then 'Add Root-level Node, ParentKey is Blank strSql =strSql &"SELECT '" &strText &"' AS [ Desc], '" &" " strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey>=0) And (childflag =True) Then 'Insère un nœud enfant dans le nœud coché, ici Valeur de clé utilisée comme ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) And (childflag =False) Then 'Inserts Node at the check-marked level, Add item under the same ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Obtenir le numéro automatique nouvellement créé à utiliser comme KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error GoTo IdxOutofBoundSelect Case intflag Case 1 'Add Root- level Node, ParentKey is Blank tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Case 2 'Insère un nœud enfant dans le nœud coché, ici la valeur de clé utilisée comme ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Case 3 'Insère un nœud au niveau coché, ajoute un élément sous la même clé parent tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Effacer les valeurs de propriété du formulaire avec moi Click() DoCmd.CloseEnd SubPrivate Sub cmdDelete_Click()Dim nodId As Long, nodParent As LongDim strSql As StringDim db As DAO.DatabaseDim j As IntegerDim tmpnode As MSComctlLib.NodeDim strKey As StringDim strMsg As Stringj =0 ' Obtenir les nœuds cochés countFor Chaque tmpnode Dans tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Noeuds sélectionnés :" &j &vbCr &"Sélectionnez un seul nœud pour Supprimer.", vbCritical, "cmdDelete()" Exit Sub End IfSet tmpnode =tv.Nodes.Item(strKey)tmpnode.Selected =TrueSet db =CurrentDb'vérifier la présence de nœud(s) enfant(s) de NodeIf marqué tmpnode.Children> 0 Alors'Avertissements :' La suppression de nœuds au hasard laissera des nœuds orphelins' dans la table et se terminera par des erreurs, lors du prochain processus de chargement de l'arborescence strMsg ="Le nœud marqué a " &tmpnode.Children &" Enfants. " &vbCr &"Supprimer également les nœuds enfants ?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Then 'Vérifier et obtenir une confirmation. strMsg ="Supprimer uniquement l'ensemble le plus profond de nœuds enfants" &vbCr strMsg =strMsg &"et leur nœud parent en même temps." &vbCr &vbCr strMsg =strMsg &"Etes-vous sûr de continuer ..?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Puis faire jusqu'à tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Supprimer le nœud enfant tv.Nodes.Remove tmpnode.Child.Index 'Supprimer l'enregistrement associé strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql Loop Else Exit Sub End If Else Exit Sub End IfEnd If nodId =Val(Mid(tmpnode.Key, 2 )) 'Supprimer le parent tv.Nodes.Remove tmpnode.Key tv.Refresh 'Supprimer l'enregistrement marqué d strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Effacer les valeurs de propriété du formulaire avec moi .TxtKey ="" . TxtParent ="" .Text ="" End With Set db =Nothing End SubPrivate Sub cmdExpand_Click()Dim nodExp As MSComctlLib.Node For Each nodExp In tv.Nodes nodExp.Expanded =True NextEnd SubPrivate Sub cmdCollapse_Click()Dim nodExp As MSComctlLib. Noeud pour chaque nodExp dans tv.Nodes nodExp.Expanded =False NextEnd SubPrivate Sub Form_Load() CreateTreeView cmdExpand_ClickEnd SubPrivate Sub CreateTreeView()Dim db As DatabaseDim rst As RecordsetDim nodKey As StringDim ParentKey As StringDim strText As StringDim strSql As StringSet tv =Me.TreeView0 .Objecttv.Nodes.Clear'Pass Référence de contrôle ImageList à la propriété ImageList de TreeView.Set ImgList =Me.ImageList0.Objecttv.ImageList =ImgListstrSql ="SELECT ID, Desc, ParentID FROM Sample;"Set db =CurrentDbSet rst =db.OpenRecordset("sample", dbOpenTable)Do While Not rst.EOF And Not rst.BOF If Nz(rst!ParentID, "") ="" Then nodKey =KeyPrfx &CStr(rst!ID) strText =rst!desc tv.Nodes.Add , , nodKey, strText, "folder_close", "folder_open" Else ParentKey =KeyPrfx &CStr(rst!ParentID) nodKey =KeyPrfx &CStr( rst!ID) strText =rst!desc tv.Nodes.Add ParentKey, tvwChild, nodKey, strText, "left_arrow", "right_arrow" End Ifrst.MoveNextLooprst.CloseOn Error GoTo 0Set rst =NothingSet db =NothingEnd SubPrivate Sub TreeView0_NodeCheck(ByVal Node As Object)Dim xnode As MSComctlLib.NodeSet xnode =Node If xnode.Checked Then xnode.Selected =True With Me .TxtKey =xnode.Key If xnode.Text =xnode.FullPath Then .TxtParent ="" Else .TxtParent =xnode. Parent.Key End If .Text =xnode.Text End With Else xnode.Selected =False With Me .TxtKey ="" .TxtParent ="" .Text ="" Fin AvecEnd IfEnd Sub

La vue de conception du formulaire frmSample est donnée ci-dessous :

Vos observations, commentaires, suggestions sont les bienvenus.

La base de données de démonstration est jointe pour téléchargement.


OBJET DICTIONNAIRE

  1. Principes de base des objets de dictionnaire
  2. Principes de base des objets de dictionnaire -2
  3. Tri des clés d'objet et des éléments du dictionnaire
  4. Afficher les enregistrements du dictionnaire
  5. Ajouter des objets de classe en tant qu'éléments de dictionnaire
  6. Mettre à jour l'élément du dictionnaire d'objets de classe