Pascal_Martinelli
Messages postés5Date d'inscriptionmercredi 9 novembre 2005StatutMembreDernière intervention11 novembre 2005
-
9 nov. 2005 à 21:36
Pascal_Martinelli
Messages postés5Date d'inscriptionmercredi 9 novembre 2005StatutMembreDernière intervention11 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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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/
Pascal_Martinelli
Messages postés5Date d'inscriptionmercredi 9 novembre 2005StatutMembreDernière intervention11 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..
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Pascal_Martinelli
Messages postés5Date d'inscriptionmercredi 9 novembre 2005StatutMembreDernière intervention11 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...
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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/
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 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". )
Pascal_Martinelli
Messages postés5Date d'inscriptionmercredi 9 novembre 2005StatutMembreDernière intervention11 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.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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/
Pascal_Martinelli
Messages postés5Date d'inscriptionmercredi 9 novembre 2005StatutMembreDernière intervention11 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.