TABLEAU DE CONTRÔLES DYNAMIQUES (AVEC ÉVÈNEMENTS)

titounet65 Messages postés 2 Date d'inscription lundi 7 août 2006 Statut Membre Dernière intervention 7 août 2006 - 7 août 2006 à 17:51
cs_tpailhes Messages postés 13 Date d'inscription lundi 23 octobre 2000 Statut Membre Dernière intervention 31 août 2012 - 31 août 2012 à 09:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37219-tableau-de-controles-dynamiques-avec-evenements

cs_tpailhes Messages postés 13 Date d'inscription lundi 23 octobre 2000 Statut Membre Dernière intervention 31 août 2012
31 août 2012 à 09:10
Merci pour cette source d'un grand intérêt (même 5 ans après).

Juste une question, je pense qu'il n'y aura pas de problème à intégrer des contrôles d'un OCX externe (comme ceux de MSCOMCTL.OCX) ?

Ta source est d'un grand secours pour ceux qui veulent développer des applications sous VBA utilisant la navigation par onglet, comme moi.

Encore merci.
cs_eriiic Messages postés 2 Date d'inscription samedi 20 janvier 2007 Statut Membre Dernière intervention 12 février 2007
12 févr. 2007 à 22:43
Bonsoir rvblog,

Merci pour tes explications. Encore un peu ténébreux pour moi tout ça, reste à l'éclaircir en mettant en application... :-)
Si jamais tu as le courage (et le temps) de faire un tutorial ça serait sympa que tu l'annonces ici, j'ai mis une alerte sur ce fil.
Bonne soirée à toi :-)
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
7 févr. 2007 à 11:54
Salut ERIIIC,

d'abord, je te remercie pour ton commentaire. Ensuite, je te remercie pour son contenu :)

Il est vrai, que quand on utilise souvent la POO en VB, et les classes d'emballage, on finit par oublier que tout le monde ne les connait pas!

Néanmoins, le but de cette source n'était pas de les présenter, mais de solutionner un problème lié au classes d'emballage :

Comment faire remonter le flux d'évènements des classes emballées, à la classe d'emballage (on ne peux pas déclarer un tableau de contrôles avec le prédicat WithEvents, ni une collection [dans ce cas, ce serait inutile, on n'obtiendrait que les évènements de la collection et pas ceux des "collectionnés"])?

Pour ce faire, je le mets en évidence (et en pratique) en tentant de "solutionner" un autre problème récurrent (mais en VBA seulement) : l'ajout dynamique de contrôles (pendant l'exécution) et la récupération des évènements de ceux-ci.

Je viens de jeter un oeil sur le site... pour constater qu'il n'existe pas de tutoriel sur les classes d'emballage! Voici donc un travail potentiel d'avenir (il faudrait juste que je trouve du temps).

Pour résumer la technique de la classe d'emballage (et des classes emballées [plus connues sous le nom de "classe à s'emballe :)]) :
- vu de l'utilisateur (mais développeur), on veux une collection d'objets de même type (MesObjets contenant du type MonObjet), et on veux manipuler cette collection comme n'importe quelle collection VB (For each In... Next, Item, Add, Remove...).
- vu du concepteur (ça peut être le même développeur), il faut une classe qui sera vue de l'utilisateur comme une collection (MesObjets, classe d'emballage, toujours au pluriel), et une classe qui sera vue de l'utilisateur comme un élément de la collection (MonObjet, classe emballée, toujours au singulier).

Donc, MesObjets implémentera, au minimum, les méthodes Add et Remove, et les propriétés Item et NewEnum (Item est la propriété par défaut, qui permet à l'utilisateur d'écrire MesObjets("Clé") pour obtenir une référence à un objet de type MonObjet, et NewEnum est la propriété qui lui permet d'écrire un bloc d'énumération For each moTemp in Mesobjets blabla Next moTemp). Pour que ceci fonctionne, MesObjets déclare un membre privé de type Collection (la vraie, mais invisible pour l'utilisateur), et s'appuie dessus pour fournir les services précités.
On peut ensuite ajouter un tas d'autres services observateurs (genre Count, ItemByValue, ...).
La classe MonObjet se contente d'implémenter une propriété ParentCollection, qui lui permet d'accéder à sa collection pour solliciter des services de sa part (c'est une référence circulaire, qu'il faut apprendre à libérer à la destruction, ce qui n'est pas le cas dans l'exemple que je fourni (oups)), et les propriétés qui sont propres à son aspect fonctionnel (par exemple Value).

Pour conclure (je n'aurais pas dû développer ici), on peut maintenant écrire :

set moTemp = MesObjets.Add("clé")
msgbox MesObjets("clé").Value
ou (parfaitement inutile, donc totalement indispensable)
msgbox MesObjets("clé").ParentCollection.Add("clé2").Value

voilà ce que cela donne quand je fais court (j'essaierais de faire un tuto, promis, à moins que quelqu'un le fasse avant).

à+, et merci encore pour ton commentaire.
PS : tu es de mon entourage, tu es sur VB France :)
cs_eriiic Messages postés 2 Date d'inscription samedi 20 janvier 2007 Statut Membre Dernière intervention 12 février 2007
6 févr. 2007 à 22:30
Bonjour rvblog,
Ton code a l'air formidable. Je dis "a l'air" car je découvre les modules de classes et si j'en vois l'interet j'avoue avoir du mal à les lire et les comprendre. En tout cas il est très adapté à un projet que j'ai en tête et ça me permettra d'en apprendre plus.
Ce qui serait bien, pour des néophytes comme moi, c'est que tu l'enrichisses en complétant avec des commentaires (déjà très nombreux, félicitation ;-) ) plus explicatifs sur le rôle des différentes sections, sur les bases des modules de classe.
Et puis sur la description donne un exemple simple d'utilisation qui encouragera la curiosité.
Je te souhaite beaucoup de téléchargements... :-)
PS : je ne suis pas de ton entourage mais un sincère merci pour ce travail et ce partage :-)
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
7 août 2006 à 22:40
Salut titounet65,
eh bien, je ne sais pas quoi dire, sinon merci.
un commentaire si précis, si bref, si succint...
tellement d'espoir porté en 2 phrases...
après 4 mois d'attente...

si ça, ça n'est pas quelqu'un de mon entourage...
alors je suis mal entouré :)
titounet65 Messages postés 2 Date d'inscription lundi 7 août 2006 Statut Membre Dernière intervention 7 août 2006
7 août 2006 à 17:51
Bravo,

J'avais déja traité ce problème mais pas aussi élégamment.
Merci à vous et bonne continuation

Au revoir
Rejoignez-nous