A. Présentation .
Microsoft Tree View Control fait partie des contrôles communs de Microsoft Windows. C'est un objet intéressant qui affiche des données connexes dans une hiérarchie de nœuds. Il peut afficher des données connexes, comme des entrées et des sous-entrées dans une liste d'index ou une liste de dossiers comme le volet gauche de l'explorateur Windows ou une liste d'éléments connexes dans une structure hiérarchique avec des lignes arborescentes, des cases à cocher et des graphiques d'images bitmap .
La ListView et ImageList Les contrôles font partie des contrôles communs de Windows et nous les utiliserons avec le contrôle TreeView dans Microsoft Access.
Je pense que vous aimeriez regarder quelques exemples d'images de démonstration de TreeView Control, sur lesquelles nous travaillerons dans les prochaines semaines.
B. Exemples d'images de démonstration .
Nœuds à l'état réduit.
- L'exemple d'image TreeView de démonstration avec tous les nœuds sous forme réduite.
Nœuds dans la vue développée.
- Les nœuds de contrôle TreeView ci-dessus dans la vue développée.
Avec des icônes d'image en forme de flèche.
- Exemple d'affichage TreeView, avec des icônes d'image en forme de flèche affichées à gauche de chaque texte de nœud.
Les nœuds de niveau racine ont des images de dossier autres avec une pointe de flèche.
- Ensuite, l'affichage TreeView avec des données liées dans un sous-formulaire. Les nœuds de niveau racine ont deux images. L'image de dossier fermé s'affiche en mode normal. Lorsque le nœud de niveau racine reçoit un clic de souris, il affiche l'image Dossier ouvert et affiche les nœuds enfants sous forme développée.
Les informations connexes sont affichées sur le sous-formulaire en fonction de la sélection du nœud de niveau racine.
L'un des éléments du nœud enfant sélectionné affiche un autre formulaire (normalement caché) avec des informations connexes.
Contrôles TreeView et ListView
- Sur l'image de formulaire suivante, il y a deux panneaux. Les nœuds liés aux articles de la catégorie de produits se trouvent dans le contrôle TreeView, dans le panneau de gauche. Lorsque l'un des éléments de catégorie reçoit un clic sur le contrôle TreeView, les éléments de produit associés avec la quantité et le prix catalogue dans des colonnes séparées apparaîtront dans ListView Contrôle, dans le panneau de droite.
C. Création d'exemples de données pour l'essai.
Essayons le contrôle TreeView avec quelques exemples de données présentés ci-dessous, basés sur les deux premières images présentées au début de cette page.
L'exemple de tableau de données ci-dessus comporte trois champs.
-
L'identifiant champ est un champ NuméroAuto avec des numéros d'identification uniques. Le type NuméroAuto est sélectionné pour notre commodité. Dans les deux cas, tous les enregistrements de la table doivent avoir une valeur d'ID unique. S'il est numérique, il doit être converti en type de chaîne avant de l'ajouter au contrôle TreeView.
-
Le deuxième champ est Description du nœud (Desc ). Les lignes d'informations de cette colonne sont logiquement liées.
-
Le troisième ParentID champ est de type numérique. Mais ils doivent être convertis en String Type avant de l'utiliser sur TreeView Control.
Nous devons savoir comment les valeurs de la colonne de description sont liées les unes aux autres, sur cette base, nous pouvons établir la relation en entrant des valeurs liées dans le ParentID champ.
Par exemple, l'arrangement logique de la relation entre l'auteur des livres, les éditeurs des livres, les librairies où les livres sont en vente, ou comme la relation entre les membres d'un arbre généalogique.
Relation entre la catégorie de produit, les produits, le stock, le prix, etc. Toutes ces informations peuvent ne pas apparaître sous une seule colonne dans un seul tableau. Ils peuvent également apparaître dans différentes colonnes ou dans différents tableaux.
L'identifiant parent Le champ est très important en ce qu'il détermine l'arrangement hiérarchique des nœuds. Si le champ ParentID est vide, cet enregistrement doit être considéré comme un nœud de niveau racine. Le nœud enfant doit toujours avoir son ID parent rempli avec sa valeur d'ID d'enregistrement parent.
Le nœud de niveau racine peut avoir un ou plusieurs nœuds enfants, le nœud enfant peut avoir son ou ses propres nœuds enfants.
Nous allons charger les données ci-dessus dans un contrôle TreeView et voir à quoi cela ressemble. Ensuite, nous remplirons le ParentId champ avec ID associé s pour changer la vue, la façon dont nous voulons le voir dans un ordre logique.
D. Fichier de bibliothèque de contrôles communs Windows .
-
Mais, tout d'abord, ouvrez l'une de vos bases de données ou créez-en une nouvelle.
-
Ouvrez la fenêtre VBA (ALT+F11 ) et sélectionnez Références… depuis Outils menu.
-
Recherchez le fichier :Microsoft Windows Common Controls dans la liste des fichiers affichés et mettez une coche pour le sélectionner.
Si vous ne trouvez pas le fichier dans la liste, cliquez sur Parcourir... Bouton et recherchez le fichier :MSCOMLIB.OCX dans le répertoire système de Windows, pour la version Windows 7, recherchez le fichier dans le SysWOW64 dossier. Cliquez sur OK pour fermer le contrôle de la liste des fichiers de bibliothèque.
-
Créez une table avec la structure suivante :
-
Enregistrez la table avec le nom Sample .
-
Remplissez le tableau avec les exemples de données de 12 enregistrements, comme indiqué sur l'image de la vue des données ci-dessus.
E. Création d'un contrôle TreeView sur le formulaire
-
Créez un nouveau formulaire vierge.
-
Cliquez sur les Contrôles Activex bouton depuis les Contrôles Group, trouvez le Microsoft TreeView Control puis sélectionnez-le.
-
Cliquez sur OK pour insérer un contrôle TreeView sur le formulaire.
-
Faites glisser le contrôle vers le bas et vers la droite pour laisser de l'espace en haut et à gauche du contrôle TreeView. Faites glisser la poignée de redimensionnement du coin inférieur droit vers le coin droit et le coin inférieur pour agrandir le contrôle, comme dans l'exemple d'image ci-dessous.
-
Affichez la feuille de propriétés du champ et changez son Nom Valeur de la propriété à TreeView0, si c'est différent là-bas.
-
Afficher la fenêtre d'édition VBA du formulaire.
- Copiez et collez le code VBA suivant dans le module en écrasant les lignes de code existantes :
Option Compare Database Option Explicit Dim tv As MSComctlLib.TreeView Const KeyPrfx As String = "X" Private Sub Form_Load() Dim db As Database Dim rst As Recordset Dim strSQL As String Dim nodKey As String Dim ParentKey As String Dim strText As String Set tv = Me.TreeView0.Object strSQL = "SELECT ID, Desc, ParentID FROM Sample;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) Do While Not rst.EOF And Not rst.BOF If Nz(rst!ParentID, "") = "" Then nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the TreeView Root Level Nodes tv.Nodes.Add , , nodKey, strText Else ParentKey = KeyPrfx & CStr(rst!ParentID) nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the Record as Child Node tv.Nodes.Add ParentKey, tvwChild, nodKey, strText End If rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
-
Enregistrez le formulaire sous le nom frmSample, mais ne fermez pas la fenêtre VBA.
G. Code VBA ligne par ligne.
F. Accéder au code VBA.
Jetons un coup d'œil au code VBA et comprenons ce qu'il fait.
Dans la Zone de Déclaration Globale, du Module Formulaire, la Variable tv déclaré comme TreeView Objet. Le KeyPrfx déclaré comme Constante , avec la valeur Type de chaîne "X".
Le nœud TreeView La valeur-clé de doit toujours être de type chaîne et nécessite au moins un caractère non numérique présent dans la clé de nœud. Nos exemples de valeurs clés de table sont tous sous forme numérique, nous pouvons les convertir et les ajouter à la valeur constante "X ”. La valeur numérique convertie en type de chaîne seule ne sera pas acceptée comme clé de nœud.
Remarque : Si la Node-Key et Parent-Key les valeurs sont déjà sous forme Alpha ou Alpha-Numérique alors la question de la conversion ne se pose pas. Toutes les valeurs Node-Key doivent être uniques.
Dans le Form_Load() Event Procedure, les objets Database et Recordset sont déclarés. Quatre variables de chaîne sont également déclarées.
L'instruction Set tv =Me.TreeView0.Object l'instruction assigne, le TreeView0 Objet sur le formulaire, à la variable d'objet tv.
L'instruction OpenRecordset() ouvre l'Sample Enregistrements de table à l'aide de SQL strSQL.
Le faire pendant que… L'instruction garantit que le jeu d'enregistrements n'est pas vide, s'il est vide, quittez la boucle et terminer le programme.
S'il existe des enregistrements, le ParentId du premier enregistrement champ est vérifié pour la présence d'une valeur là-dedans ou non.
S'il est vide, cet enregistrement concerne le nœud de niveau racine du contrôle TreeView. Objet. Le nœud de niveau racine n'a besoin que de l'unique Node-Key Valeur, que nous avons déjà dans l'ID Description du champ et de l'élément Valeur de champ pour Texte Argumentation.
Si le ParentID le champ a une certaine valeur alors l'enregistrement est un Child-Node (enfant du nœud de niveau racine ou enfant d'un nœud enfant de niveau supérieur) de l'objet TreeView.
La ligne suivante crée la Clé Valeur d'argument dans nodKey Variable de chaîne, avec l'ID valeur du champ, convertie en chaîne et ajoutée au préfixe constant X, Node-Key devient X1 .
La première !Desc valeur de champ ajoutée à la variable de chaîne strText, simplement pour plus de clarté et pour faire court dans le Nodes.Add() liste des paramètres de la méthode, si la référence du champ est très longue, cela gardera la méthode Add () propre et bien rangée.
La ligne exécutable suivante :tv.Node.Add() appelle la méthode Add() de TreeView.Nodes Objet pour ajouter le nœud à TreeView0 contrôle sur le formulaire frmSample .
La syntaxe de la méthode Add() est donnée ci-dessous pour référence :
tv.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node
Les six paramètres de Add() méthode sont facultatives. Si vous appelez cette méthode sans aucun paramètre, un nœud de niveau racine vide sera ajouté et une arborescence vide apparaîtra comme indicateur dans le contrôle TreeView.
Pour TreeView Root Nœud de niveau nécessite la Clé et Texte Valeurs des arguments.
Pour les nœuds enfants, les deux [Relative] et [Relation] Des arguments sont nécessaires. L'omission de l'un d'entre eux insérera le nœud en tant que nœud racine, mais ne générera aucune erreur.
[Parent] est la NodKey d'un nœud existant, saisi dans le ParentID de l'enregistrement associé domaine. [Relation] est un tvwChild constant avec la valeur numérique 4, en l'identifiant comme un nœud enfant de Key- Valeur dans ParentID Champ.
L'autre Constante les valeurs de l'argument de relation sont utilisées pour positionner les nœuds enfants à un emplacement spécifique. Les valeurs constantes sont les suivantes :
tvwFirst =0, le place comme premier Nœud, au niveau du Nœud relatif.
tvwLast =1, se place comme dernier Nœud, au niveau du Nœud relatif.
tvwSuivant =2, place le nœud après un nœud spécifié.
tvwPrécédent =3, place le nœud juste avant le nœud spécifié.
Remarque : Vous pouvez expérimenter en définissant chaque valeur dans la relation Argumentez et exécutez le code en mode débogage, après avoir conservé côte à côte la fenêtre et le formulaire VBA en mode Normal. Regardez comment les nœuds sont organisés dans chaque cycle d'exécution du code pour comprendre.
Ceux-ci seront utiles lors de la modification du contrôle TreeView en supprimant un élément et en insérant un autre élément à sa place ou en ajoutant un nouveau nœud à un emplacement spécifique.
Un nœud avec une clé [relative] doit exister dans la collection de nœuds avant de tenter d'ajouter un nœud enfant à ce nœud, sinon la méthode Add() génère une erreur.
Ce processus est répété jusqu'à ce que tous les enregistrements soient traités dans le jeu d'enregistrements.
Remarque : Vous pouvez revoir le code VBA après les exécutions de démonstration.
H. Le premier essai.
Ouvrez le formulaire en mode Normal. Le résultat de l'essai ressemblera à l'image ci-dessous.
Cela ne ressemble pas plus qu'à une Listbox normale. N'oubliez pas que nous n'avons rempli aucune valeur dans le ParentID champ dans notre échantillon Table. Nous devons établir une relation entre les éléments dans les lignes de Record pour les déplacer et les positionner dans un ordre hiérarchique dans le contrôle TreeView.
Je. Comprendre la relation entre les enregistrements.
- Ouvrez le tableau d'échantillons et examinons les Documents et comment ils sont liés.
- Laissons la base de données élément seul en tant qu'élément racine.
L'objet de base de données comporte également des objets de niveau supérieur :Application, DBEngine, Workspaces Collection et Databases Collection , que nous avons omis ici.
- Ensuite, nous avons les tableaux élément de groupe avec ID valeur 2.
- Le prochain tableau , Champs, Champ les éléments sont liés aux Tableaux grouper. Nous voulons la Table, Champs, et Champ éléments à aligner sous les tableaux d'éléments parent Enregistrement de groupe avec la valeur ID 2.
- Appelons l'enregistrement Tables en tant que nœud parent , Tableau, Champs et Enregistrements de champ en tant que nœuds enfants .
J. Mise à jour du champ ParentID.
- Nous devons donc mettre à jour la valeur 2 (Nœud-Clé des Tables ) dans le parentID champ de Table , Champs, et Champ enregistrements.
- Veuillez mettre à jour uniquement ces enregistrements et fermer le tableau. Une fois terminé, les enregistrements ressembleront à l'image ci-dessous :
-
Maintenant, ouvrez votre frmSample en mode formulaire et cochez le contrôle TreeView. Le résultat ressemblera au précédent sans aucun changement. Les modifications ont déjà eu lieu mais elles ne sont pas visibles pour vous.
K. La feuille de propriétés du contrôle TreeView.
- Tournez le frmSample en mode Création.
- Cliquez avec le bouton droit sur le contrôle TreeView et mettez en surbrillance TreeCtrl_Object dans le menu contextuel et sélectionnez Propriétés .
La feuille de propriétés ressemblera à l'image ci-dessous :
- Modifier le style de ligne Propriété Valeur =1 (tvwRootLines) et cliquez sur Appliquer puis cliquez sur OK pour fermer la feuille de propriétés.
L. Exécuter après le LineStyle Modification de la valeur de la propriété
- Enregistrez le formulaire et ouvrez-le en mode Normal. Maintenant, les Tree Lines apparaissent correctement. Les tableaux Le nœud a un plus (+ ) signe sur le côté gauche, indiquant que ce nœud a un ou plusieurs nœuds enfants au niveau suivant et qu'ils ne sont pas sous forme développée.
- Cliquez sur le symbole plus pour développer le nœud et afficher les nœuds enfants, avec le même ID parent. Lorsque vous cliquez sur le symbole moins, les nœuds enfants sont réduits et masqués, changeant à nouveau le symbole en signe plus.
- L'affichage ressemblera à l'image suivante lorsqu'il sera agrandi :
M. Identifiant parent Mise à jour des autres enregistrements.
Nous mettrons à jour les formulaires enregistrer ID Valeur (Node-Key Value) dans Form, Controls, et Contrôle ParentID des enregistrements champs afin que ces enregistrements soient listés sous les formulaires Nœud en tant que ses nœuds enfants .
De même, mettez à jour le champ ParentID de Rapport et Commandes enregistrements avec rapports identifiant (Node-Key Value) Valeur de sorte que Rapport et Commandes les éléments seront positionnés sous le nœud parent Rapports , car il s'agit de nœuds enfants .
-
Apportez des modifications à vos enregistrements de table Sample avec les valeurs ParentID comme indiqué ci-dessous :
Après les modifications ci-dessus, l'affichage TreeView ressemblera à l'image suivante, lorsque tous les nœuds seront sous forme développée.
Tous les nœuds enfants liés aux nœuds de niveau racine :les tables, les formulaires et les rapports sont regroupés sous forme de liste sous leurs nœuds parents. Mais un nœud enfant peut avoir un nœud parent, un nœud grand-parent ou un nœud arrière-grand-parent.
N. Organiser tous les objets dans un ordre hiérarchique logique.
Par exemple, prenons les tables du premier noeud de niveau racine . Logiquement Champ (avec l'ID d'enregistrement 5) est directement lié aux Champs collection (enregistrement ID 4), les Champs collection liée à Table et tableau fait partie de Tableaux le recueil. Chaque élément du groupe (numéro d'enregistrement 5 à 2) est lié d'une étape au niveau suivant.
Positionnons donc correctement ces nœuds enfants sous leur propre nœud parent et voyons à quoi cela ressemble.
-
Ouvrez votre exemple de table et modifiez les valeurs ParentID des tables liés aux dossiers enfants comme indiqué ci-dessous :
- Le Champ avec Le parent de l'enregistrement ID-5 est Champs, enregistrement avec ID-4, nous avons donc mis à jour le champ ParentID du 5e enregistrement avec le numéro d'identification 4.
- De même, le champ ParentID du 4e enregistrement est mis à jour avec 3, et le ParentID du 3e enregistrement est mis à jour avec le numéro d'enregistrement 2.
-
Remarque : Ne partez pas du principe que les éléments disposés de cette manière doivent être côte à côte.
- Une fois les modifications apportées aux enregistrements, enregistrez la table et ouvrez le frmSample pour afficher les modifications. Votre affichage TreeView devrait ressembler à l'image ci-dessous, avec tous les nœuds sous forme développée.
Le contrôle TreeView a sa propre feuille de propriétés et les paramètres influencent son apparence. Nous allons donc modifier l'une de ses propriétés et revenir pour afficher à nouveau le TreeView.
Les paramètres de cette feuille de propriétés modifient l'apparence de l'affichage TreeView.
Le style de propriété en haut à gauche est déjà défini avec le maximum de fonctionnalités disponibles Option-7 (tvwTreeLinesPlusMinusPictureText).
Le nœud enfant d'un nœud de niveau racine peut être un nœud parent de son ou ses propres enfants. De cette façon, il peut descendre plusieurs étapes dans l'arbre.
Modifiez les deux autres groupes de ParentID du nœud enfant valeurs de champ pour ressembler à l'image donnée ci-dessus.
OBJET DICTIONNAIRE
- Principes de base des objets de dictionnaire
- Principes de base des objets de dictionnaire -2
- Tri des clés d'objet et des éléments du dictionnaire
- Afficher les enregistrements du dictionnaire
- Ajouter des objets de classe en tant qu'éléments de dictionnaire
- Mettre à jour l'élément du dictionnaire d'objets de classe