PhilocheMan
Messages postés55Date d'inscriptionjeudi 28 juillet 2005StatutMembreDernière intervention23 mars 2006
-
15 mars 2006 à 12:58
PhilocheMan
Messages postés55Date d'inscriptionjeudi 28 juillet 2005StatutMembreDernière intervention23 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 ???
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 15 mars 2006 à 13:32
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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 15 mars 2006 à 13:11
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, ...