Comment lier collection objets à procédure évènement ???

Le
LE TROLL
Bonjour,

J'ai déclaré 9 objets, puis j'ai fait une classe pour les y mettre afin
de les indicer, mais, quand je veux utiliser cette classe dans une procédure
évènementielle (click) rien ne va plus, je n'arrive pas à avoir celui des 9
objets qui est cliqué, ni à écrire correctement la procédure pour remplacer
le nom de l'objet par celui de la classe de tous les objets identiques ici
(rappel = 9 combos).

Voici où j'en suis :

Sub cc_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
cc.Click
Dim x
x = cc.Item(sender) ' REFUSE
MsgBox(x)
End Sub

Obs : ma classe s'appelle cc et elle contient des combo1 à combo9 = 9 que je
veux faire fonctionner dans l'évènement click.

Comment faire marcher cette procédure en deux questions :

-1- Comment écrire correctement la procédure par rapport à la classe quelle
représente, car la fin n'est pas acceptée après Handles, et le click ne
répond plus si je supprime "handles" ?

-2- Comment récupérer quand la procédure sera réparée, l'index de l'objet
clique (1 à 9) ?

Merci beaucoup, cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LE TROLL
Le #21019031
Indexer et gérer des objets par le code, réponse :

J'ai enfin trouvé après deux heures de lecture sur Internet, voici le code
de la réponse qui pourra servir pour l'indexation dans les moteurs :

Rappel des faits :
L'indexation directe de contrôlee x(i), n'est plus possible avec VbNet, donc
on peut le faire néanmoins en créant une collection avec le code, il s'agit
en l'espèce de 9 comboBox (comboBox1 à ...9), voici le code :


Public Class form4
Dim cc As New Collection()
Sub form4_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Me.Load
cc.Add(Me.ComboBox1)
cc.Add(Me.ComboBox2)
cc.Add(Me.ComboBox3)
cc.Add(Me.ComboBox4)
cc.Add(Me.ComboBox5)
cc.Add(Me.ComboBox6)
cc.Add(Me.ComboBox7)
cc.Add(Me.ComboBox8)
cc.Add(Me.ComboBox9)

Ainsi dans la forme (4 ici), on déclare une variable "cc" comme pointant sur
une collection qui va servir d'indice, puis on remplit la collection des
objets à indicer, de la sorte on n'aura plus qu'à faire

dim i
dim j
for i = 1 to 9
for j = 1 to 5
cc(i).item.Ad(j)
next j
next i

pour avoir dans les comboBox une 5 entrée chacun ayant une valeur de 1 à 5,
ce qui de facto permet d'indicer par une boucle comme avec vb6.

C'est après que ça devient plus compliqué, ce fut l'objet de ma question :
comment utiliser cette indice de collection dans une procédure
évènementielle, en l'occurence ici un Click, voici le code de la réponse :

Sub cc_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
ComboBox1.Click, ComboBox2.Click, ComboBox3.Click, ComboBox4.Click,
ComboBox5.Click, ComboBox6.Click, ComboBox7.Click, ComboBox8.Click,
ComboBox9.Click
Dim i As Integer
For i = 1 To cc.Count
If cc.Item(i).Name = sender.Name Then MsgBox(i)
Next i
End Sub

Sub form4_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
cc = Nothing
End Sub
End Class

Commentaires :
Il faut déjà appeler la procédure avec le nom de la variable qui sert
d'indice et qui pointe sur la collection déjà définie, puis à la fin, après
le Handles, il faut ajouter comme on le voit, le nom de chaque objet avec
l'évènement invoqué, en l'espèce
ComboBoxX.click,
NB : Un point entre les deux et une virgule de séparation.

Puis in fine, effectuer un test en boucle sur le pointeur de la procédure
"Sender", voir le code, afin d'identifier le numéro du contrôle qui répond
s'il y a lieu à la l'évènement invoqué.

Ce code n'est sans doute pas parfait et peut être amélioré...

J'ai trouvé en grande partie grâce à des cours sur Internet, ici :

http://www.pise.info/vb-net/06.htm

Cordialement :o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"LE TROLL" news:
Bonjour,

J'ai déclaré 9 objets, puis j'ai fait une classe pour les y mettre afin
de les indicer, mais, quand je veux utiliser cette classe dans une
procédure évènementielle (click) rien ne va plus, je n'arrive pas à avoir
celui des 9 objets qui est cliqué, ni à écrire correctement la procédure
pour remplacer le nom de l'objet par celui de la classe de tous les objets
identiques ici (rappel = 9 combos).

Voici où j'en suis :

Sub cc_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
cc.Click
Dim x
x = cc.Item(sender) ' REFUSE
MsgBox(x)
End Sub

Obs : ma classe s'appelle cc et elle contient des combo1 à combo9 = 9 que
je veux faire fonctionner dans l'évènement click.

Comment faire marcher cette procédure en deux questions :

-1- Comment écrire correctement la procédure par rapport à la classe
quelle représente, car la fin n'est pas acceptée après Handles, et le
click ne répond plus si je supprime "handles..." ?

-2- Comment récupérer quand la procédure sera réparée, l'index de l'objet
clique (1 à 9) ?

Merci beaucoup, cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.




Publicité
Poster une réponse
Anonyme