Réponse acceptée !
Salut violent_ken, salut Renfield,
juste un peu plus de détails (je m'ennuie, alors je m'occupe :)) :
Ton 1er message ""Le contrôle ImageList doit être initialisé avant utilisation" erreur 35613" n'est pas émis par le contrôle ImageList mais par le TreeView/ListView que tu utilises.
Dans ce message, ImageList est le nom d'une de leurs propriétés, et le message dit que tu ne peux pas ajouter un Node/ListItem sans renseigner cette propriété avant.
Mais à quoi sert cette propriété? C'est tout simplement le fameux lien entre le contrôle ImageList et le TreeView/ListView. Elle te permet d'ajouter un Node/ListItem en donnant en argument la clé de l'image du contrôle ImageList, sans avoir à écrire un truc du genre "ImageList1.ListImage(LaCle).Picture....".
Le 2ème message "Le contrôle ImageList ne peut pas être modifié tant qu'un autre contrôle est dépendant de lui-35917" dit que tu ne peux pas modifier contrôle ImageListsans désactiver ce lien. Il existe alors 2 écoles :
- tu peux, en mode conception, ajouter des images dans le contrôle ImageList, en leur donnant une clé unique, et faire le lien avec le TreeView/ListView. La banque d'image sera toujours la même, en exécution, mais tu pourras remplir/vider/modifer le contenu du TreeView/ListView à loisir (dans la mesure des images disponibles).
- tu peux, pendant l'exécution ajouter des images à un contrôle ImageListnon lié, en leur donnant une clé unique à chacune. Une fois ceci fait, tu peux, toujours en code, faire le lien : Me.TreeView1.ImageList = Me.imglstLargeIcons, et enfin remplir/vider/modifier le contenu du TreeView/ListView à loisir (dans la mesure des images disponibles). Si tu veux à nouveau charger des images, tu dois défaire le lien avant, et veiller à n'utiliser que des nouvelles clés uniques (à moins de supprimer les images que tu veux remplacer, et ré-utiliser les clés qu'elles portaient).
J'ai suffisament parlé de clé unique d'image pour ne pas avoir à expliquer le 3ème message "Clé non unique dans la collection -35602". Dans l'objet ImageList, tout comme dans le TreeView/ListView, les propriétés, respectivement ListImage, Nodes et ListItems sont des collections, dont chaque élément ajouté se doit d'avoir une clé unique (une chaine de caractères quelconque, mais unique dans la collection), et grâce à cela, on peut écrire, par exemple : Me.TreeView1.Nodes("root").EnsureVisible
Enfin, pour tes dernières questions, je fais un package. Tout cela relève de critères de conception (ou d'architecture, de modélisation...). Le concepteur, c'est toi. Tu utilises certainement des tableaux dans ton application. Certains sont peut-être différents, mais de même contenu, d'autres centralisent peut-être des données fonctionnellement incompatibles. Comment as-tu décidé de combien de tableaux, et où les déclarer?
Il s'agit là de choix réféléchis, adaptés à un contexte que tu es le seul (architecte) à maitriser, j'entends là, ton application.
Pour ma part, une banque d'image, c'est une base de données, dont chaque image est unique. Là où certains chipotent pour une String à la place d'un Variant, alors qu'on a 2Go de RAM, pour les images, c'est diablement plus important d'éviter de les dupliquer pour rien. Mais suivant le cas d'utilisation, la duplication peut être nécessaire.
Par exemple, pour gérer l'affichage du ListView, je crée une banque SmallIcons et une LargeIcons, d'autant d'image chacune, avec la même liste de clé dans chacune. Il me suffit de dire au ListView de changer de type de vue, et lui, il change de banque d'image (le code pour le remplir reste le même, puisque les clés sont identiques).
Autre exemple, pour un TreeView/ListView qui aurait pour charge de m'afficher des vignettes d'images contenues dans un répertoire, j'aurais besoin de remplir la base d'images au fur et à mesure du parcours du contenu du répertoire, faire le lien, et remplir le TreeView/ListView.
Encore un dernier, j'ai un formulaire qui reprend, avec un TreeView/ListView, les fonctionnalités d'Outlook (dossier groupes de contacts, dossier boite de reception, dossier courrier non lu...), et quand je double-clique la pièce jointe d'un message, j'ouvre un formulaire qui présente, avec un TreeView/ListView, le contenu de mes disques durs (comme l'Explorateur), pour cibler l'enregistrement du fichier. Si je mets toutes les icones dans une banque centralisée, ça marchera bien, mais quand je voudrais récupérer le formulaire type Explorateur pour l'intégrer dans une autre application, il va falloir aller récupérer les images qu'il utilise, et elles seules. S'il avait eu sa banque, ce serait plus ré-utilisable.
Maitriser n'est rien, la solution, c'est se faire plaisir.
Trop de tout, sinon rien. Mais t'as déjà bien avancé.
J'espère que ces explications vont plus t'aider que t'ennuyer.
à+
rvblogn
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!