[VB6] Variable dans le module d'un Usercontrol [Résolu]

Messages postés
55
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
23 mars 2006
- - Dernière réponse : PhilocheMan
Messages postés
55
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
23 mars 2006
- 15 mars 2006 à 14:05
Bonjour,
J'ai un problème avec la déclaration de variables dans un module associé à un controle utilisateur.
Voici le souci :
Je programme un activex qui affiche dans un picturebox l'image provenant d'une webcam. Un module .bas contient l'ensemble de mes fonctions, dont une qui, après comparaison avec l'image précédente, affiche une cible en X,Y correspondant au point différent (zone de mouvement). Ce "point" X,Y est déclaré dans le module (dim cibleX as int, ...).
Tout fonctionne super bien, mais si dans mon projet, j'ajoute un 2ème contrôle activeX (pour une 2ème webcam) , je me rend compte que ma "cible" bouge simmultanément sur mes 2 images.
J'en conclue que, si les variables déclarées dans le usercontrol sont uniques pour chaque controle, les variables déclarées dans le module sont communes ???

Le fait de les déclarer dans le module en tant que private ne change rien...
Des idées ???

Merci d'avance
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
3
Merci
Salut Philocheman,

ta conclusion me semble fort judicieuse, le niveau module des modules standards d'un contrôle utilisateur est partagé par toutes les instances de ce contrôle. Etonnant, non! C'est un peu l'équivalant des super-méthodes ou super-proriétés (ou méthodes et propriétés de super classes), qui ont un intérêt réel. Par exemple, tu peux t'en servir pour compter le nombre d'instances, ou pour partager des variables statiques dans des fonctions publiques.

Le seul moyen, et le plus conventionnel, pour ne pas partager des propriétés, est d'utiliser des membres privés dans le contrôle utilisateur (donc des propriétés, c'est la base de l'objet), et pas des variables globales (dans ce cas-ci).

Tu peux aussi implémenter un tableau privé(donc privé au niveau module d'un module standard), et écrire une méthode de protection de ce pseudo-membre qui stockera les valeurs avec des indices bien pensés (mais c'est plus compliqué, et même pas justifiable en terme de qualité).

Dans ton cas, chaque instance a besoin d'une cible, et chaque cible n'appartient qu'à une instance, tout en n'étant pas forcément une propriété de l'instance (au sens conceptuel de d'attribut d'entité).
Aussi, tu peux déclarer une classe Cible, implémentant les propriétés X et Y, et instancier cette classe dans ton contrôle utilisateur (par ex, d'office dans le Class_Initialize, car conceptuellement ton contrôle utilisateur à toujours une cible [1-1]).
Tu n'auras écrit qu'une fois la déclaration des x et y (c'est souvent ce besoin qui nous amène [enfin pas moi] à déclarer des variables globales), tu auras la possibilité de contrôler les valeurs affectées à ces propriétés (pour vérifier une plage par exemple) puisque ce sont des propriétés et non des variables.

Voilà,
a+

rvblogn

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
salut,

en effet, le usercontrol est instancié, le module est unique.

des idées... beh tu peux utiliser tes variables en private dans le
usercontrol (c'est le plus simple, et peut-être le plus logique selon
le code de tes fonctions communes), soit utiliser un tableau private
dans le module, ou encore une collection, ...



++

PCPT [AFCK]
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
0
Merci
oups, scuse Pcpt.
l'inconvénient des réponses longues (je viens de le comprendre), c'est qu'elles arrivent plus tard.

rvblogn
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
d'accord sur le principe, mais absolument par sur ce genre d'application.

en revenir à une méthode Implements pour juste un usercontrol, aucun intérêt (simple point de vue discutable des heures...).

par ce biais on en revient juste aux variables locales privées dans chaque UC
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
idem de mon côté avec cette réponse courte ^^
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
0
Merci
Pcpt a raison,

pas de méthode Implements !!!
mais j'ai parlé de méthode Implements ?!?
pas de mais, pas de méthode Implements !!!

LoL

rvblogn
Messages postés
55
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
23 mars 2006
1
0
Merci
Bien, voilà qui est parfaitement clair et me conforte dans ce que je pensais... c'est à dire que je suis dans la mouise

Merci à tous pour vos réponses éclairées... et éclairantes !