Index ds une collection de usercontrol

Pascal_Martinelli Messages postés 5 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 11 novembre 2005 - 9 nov. 2005 à 21:36
Pascal_Martinelli Messages postés 5 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 11 novembre 2005 - 11 nov. 2005 à 15:22
BONJOUR,

Si vous invoquez une methode d'un element d'une collection de usercontrol...
EX : usercontrol(8).toto

Soit la methode toto ecrite ds la definition du control :
Public sub Toto() '
???? Coment connaitre ici l'index de l'appellant ??? ( en l'occurence la valeur 8 )
end sub

MERCI BCP je seche vraiment... Pascal...

10 réponses

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
9 nov. 2005 à 23:54
Très, mais alors, très bonne question à laquelle je n'ai pas la réponse mais que je me pose également!
Si tu trouves tout seul, dit le moi stp...

Je me demande s'il n'y a pas quelque chose à faire avec l'ambiant property (dont je ne me suis jamais servit à dire vrai!) !

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 nov. 2005 à 06:46
Oula, tu confonds un peu les collections d'objets et les collections dans un usercontrol là !



Dans un contrôle, si tu as un groupe de contrôle, alors l'appel est :

Control(index).Methode



Si dans un usercontrol, tu appelle une méthode d'un objet :

Usercontrol.Collection(index).Methode



Et ce sera la méthode Methode de l'objet de ta collection qui sera automatiquement appellé (normal !).



Donc si tu as un objet avec 1 méthode, et que tu mets 4 de ces objets
dans une collection, tu n'a pas à récupèrer l'index de la collection
appellé puisque le bon objet sera appelé (à part si l'utilisateur se
plante d'index bien entendu).

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
Pascal_Martinelli Messages postés 5 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 11 novembre 2005
10 nov. 2005 à 22:12
Merci bcp pour ta reponse..
Je vais etre un peu plus precis,

j'ai créé un groupe de control de usercontrol..
UsrModule est le nom de ce usercontrol...

Ensuite je crée en mode création l'instance 0 (zéro) nommée UsrModule1(0)
puis dynamiquement ( avec load ) je crée 19 nouvelles instances ..
Au total UsrModule1(0) à UsrModule1(19)

Si maintenant ds mon application je clique sur une de ces instances, je vais ecrire le code
pour Private sub UsrModule_click()
.....
end sub

Comment savoir à l'interieur de cette procedure laquelle ce ces instances a été cliquée !! ???

Le pb est le même si je crée une méthode..

A l'appel la syntaxe sera / UsrModule(K).toto

Comment retrouver la valeur de K ds la procedure ( Public.UsrModule.toto )
La seule solution que j'ai est la suivante : je rajoute en argument de la méthode, l'index de l'instance..

Ce qui donne UsrModule(K).toto(K) !!! Je trouve cela un peu beurk...

Il existe surement un truc qui retourne l'index de l'instance appelée ds un groupe de controle..

Pascal...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 nov. 2005 à 22:23
Oula, tu confonds vraiment tout alors ;)



Lors du click sur un contrôle contenu dans un usercontrol, tu as le
paramètre Index qui te permet de savoir quel contrôle a été cliqué :

Private sub UsrModule_click(ByVal Index As Integer)

.....

end sub


Pour une procédure de ton usercontrol, je ne vois vraiment pas pourquoi
tu veux récupèrer l'index du contrôle puisque de toute façon, il faut
que tu l'appelle avec son index (à quoi ca peut bien te servir de
savoir si c'est l'index du contrôle
10 ou du contrôle 15 que tu appelle puisque seul la méthode du contrôle
dont tu définit l'index sera appellé ???) :

Control(Index).Methode



Ceci est valable non seulement pour les contrôles standards, mais aussi
pour les usercontrols, et ce n'est pas une question de collection dans
un usercontrol, mais de groupe de contrôles !

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pascal_Martinelli Messages postés 5 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 11 novembre 2005
10 nov. 2005 à 22:54
Tu me dis :
Lors du click sur un contrôle contenu dans un usercontrol, tu as le paramètre Index qui te permet de savoir quel contrôle a été cliqué :
Private sub UsrModule_click(ByVal Index As Integer)

Il ne s'agit pas d'un groupe de controle DANS un usercontrol mais d'un groupe DE usercontrols sur Form1..

Donc : Si tu cliques sur une des instances "usercontrols" placés sur form1....tu n'as PAS l'index...

EX :
Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

Donc le pb persiste...

Tu me dis ensuite..
Pour une procédure de ton usercontrol, je ne vois vraiment pas pourquoi tu veux récupèrer l'index du contrôle puisque de toute façon, il faut que tu l'appelle avec son index (à quoi ca peut bien te servir de savoir si c'est l'index du contrôle 10 ou du contrôle 15 que tu appelle puisque seul la méthode du contrôle dont tu définit l'index sera appellé ???) :
Control(Index).Methode

Là on se comprend mieux... (désolé de ne pas être plus clair)...
Bon, ds ce cas il se trouve que l'appelant envoi l'index pour faire un traitement par la methode qui depend lui même de l'index. ( cela n'a rien d'extraordinaire ) ... Si t'avais un truc pour recuperer ce foutu index...

Pascal...


Pascal...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 nov. 2005 à 05:56
J'ai parfaitement compris que tu n'utilise par une collection dans
ton usercontrol, mais un groupe de contrôle sur ta feuille, et là, ce
qui te pose problème, ce n'est pas l'utilisation des index, mais la
logique qui y est rattachée :

si tu as crée l'index du contrôle APRES avoir définit les propriétés
qui t'interesse (par exemple click ou mouse_down), l'argument Index
n'est pas automatiquement rajouté par VB, c'est à toi de le rajouter
manuellement, mais je peux t'assurer que si tu as bien définit un
groupe de contrôle, cela marche comme cà, c'est comme si tu fait un
groupe de 4 command button, c'est le même principe !



Pour ton problème d'appel de procédure, il est très dangeureux de
récupèrer l'index du contrôle pour appeler une méthode qui dépend de
cet index : si tu change l'index un jour, ton control aura un tout
autre comportement, et c'est, ce n'est pas le but d'un usercontrol. Un
usercontrol se doit d'être le moins spécifique possible pour pouvoir
être utilisée le plus simplement possible. Si tu lui oblige d'avoir
l'index 1 et non l'index 0 pour qu'il puisse faire telle ou telle
chose, c'est vraiment compliqué à utiliser, crois moi (et c'est
vraiment un cas extraordinaire !).



Mais explique mieux le traitement qui dépend de l'index pour voir s'il
n'existe pas une méthode qui ne dépendrait pas de l'index.

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
11 nov. 2005 à 12:05
Vous êtes pas très clair les mecs!!!

Wai, autrement dit, l'index d'un groupe de contrôle d'une feuille est géré automatiquement par VB (puisque tous les contrôles, y compris les usercontrols ont, par défaut et que le veuille ou non, la propriété Index [entre autre] {qui se rajoute donc automatiquement}) et les indexes ne sont utilisés que dans les procédures événementielles de la feuille. C'est donc VB qui se charge d'appeler les méthodes/propriétés, ... des contrôles concernés par le dit index. Et il est vrai que programmer un controle en tenant compte de cet index et, outre inutile, dangereux et contre-nature en terme de POO (enfin, à mon sens!). Ceci dit, je persiste à dire que tu dois pouvoir le récupérer facilement, soit en y faisant directement référence, soit en passant par ce truc bidule qu'ils appellent "l'ambiant property" et que j'ai jamais pigé !

En revanche, utiliser un groupe de contrôle DANS un usercontrol s'avère très intéressant!
En effet, c'est exploiter toute la puissance de la POO que de faire ce genre de usercontrols. Par exemple, pour créer des listes, treeviews et autre.
On crée d'abort un controle de base (le node pour un treeview p.ex.) puis, dans le usercontrole supérieur (le treeview donc), on crée une interface utilisateur (méthodes) pour ajouter/supprimer les instances du controle inférieur (les nodes donc) le tout en gérant leurs Indexs!

N'est-ce pas un truc du genre que tu cherches à faire ???

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
Pascal_Martinelli Messages postés 5 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 11 novembre 2005
11 nov. 2005 à 13:40
Tu me dis,
si tu as crée l'index du contrôle APRES avoir définit les propriétés qui t'interesse (par exemple click ou mouse_down), l'argument Index n'est pas automatiquement rajouté par VB, c'est à toi de le rajouter manuellement, mais je peux t'assurer que si tu as bien définit un groupe de contrôle, cela marche comme cà, c'est comme si tu fait un groupe de 4 command button, c'est le même principe ..

L'evenement "_click" n'est pas disponible pour les instances des userscontroles, vb propose uniquement dragdrop, lostfocus, gotfocus & validate
JE ME DEMANDE POURQUOI CELA N'EST POSSIBLE. ou alors j'ai raté un train..

Il est impossible d'ajouter la variable index ds la definition (.CTL) du control puisque celle-ci surtout peut etre aussi destinée a creer des controles independants.

Je vais vous exposer simplement le pb que j'ai a resoudre...
Mon groupe de controle de usercontrols UserModule1(x ) etant créé sur form1, j'ai besoin de recuperer ds le module activé par l'evenement "click" l'index de l'instance qui a été cliqué pour instruire un tableau ..

Pour l'instant je fais un truc qui ne me parait pas trés propre voir beurk..

Quand je clique sur une instance :
Indexmodule prend l'index du module cliqué..

Private Sub UserModule1_GotFocus(Index As Integer)
' Recup de l'index du dernier element qui a le focus
IndexModule = Index
End Sub

Je dispose ensuite de l'index du module cliqué ds l'ecriture des modules sensibles au click ds la definition du control (ctl)... Sauf que le module cliqué n'est pas forcement celui qui a le focus et cela m'oblige a bricoler.

Pascal..
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 nov. 2005 à 14:54
sans vouloir être méchant, et excuse ma franchise : regarde les
sources de contrôles déposées sur le site, et apprends à en fabriquer
un, car créer un événement est la base de la conception d'un ocx !



Et une fois que tu saura comment créer des événements, créer des
groupes de contrôles, etc, revient nous voir pour poser les questions
que tu ne comprends pas : les problèmes que tu te poses actuellement
montre que tu n'a pas tout compris au développement d'un contrôle ocx.

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
Pascal_Martinelli Messages postés 5 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 11 novembre 2005
11 nov. 2005 à 15:22
"créer un événement est la base de la conception d'un ocx !"

Ben, voila enfin une info qui va peut-etre ma permettre d'avancer...

Ps : No pb pour la franchise. Si je pose une question ici c'est pour apprendre, pas pour me faire passer pour ce que je ne suis pas...

A vrai dire, comme je ne savais pas que je pouvais ajouter des evenements à ceux trop peu nombreux que j'ai cité, j'ai bourré le control de tout mon code faute de pouvoir le mettre ds l'instance... ( ceci dit, vu de l'ext l'appli marche t bien.. ).. Je travaille sur les users control depuis qq jours... Soit indulgent.

A+ et merci pour les reponses..

Pascal...
0
Rejoignez-nous