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

  • Question

  •       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)


    Joe ___ Romans et Logiciels ___ http://irolog.free.fr
    mercredi 20 janvier 2010 13:15

Réponses

  • 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)
    .

    Joe ___ Romans et Logiciels ___ http://irolog.free.fr
    • Modifié EhJoe mercredi 20 janvier 2010 18:03 1
    • Marqué comme réponse EhJoe mercredi 20 janvier 2010 18:04
    mercredi 20 janvier 2010 18:02