Comment lier collection objets à procédure évènement ???
1 réponse
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) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
LE TROLL
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 :
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) ?
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 :
"LE TROLL" <le troll@enfer.fr> a écrit dans le message de
news:EFBB10E3-B308-4EE4-889D-FE99DBA8CB94@microsoft.com...
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) ?
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 :
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) ?