none
Comment créer une collection d'objets logiques ? RRS feed

  • Question

  • Bonjour,

    Je cherche à créer une collection d'objets logiques (button(3)), je sais créer logiquement, je sais créer une collection, mais la liaison des deux, j'avoues que je suis dépassé, je n'ai jamais fait ! Voici le code, comme susdit le but est de créer une collection en trois exemplaires d'un objet Button b(3), suivront les questions ...

    '
    
    Option Explicit On
    
    Public Class Form1
    
     Dim WithEvents b As New Collection()
    
    
    
     Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
    
    
     b.Add(Me.b(1))
    
     b.Add(Me.b(2))
    
     b.Add(Me.b(3))
    
    
    
     Controls.AddRange(New System.Windows.Forms.Control() {b(3)})
    
     '
    
     Dim i As Integer
    
     b(1).top = 10
    
     b(2).top = b(1).top + 30
    
     b(3).top = b(2).top + 30
    
     b(1).text = "gris Vertical"
    
     b(2).text = "gris Horizontal"
    
     b(3).text = "rouge Vertical"
    
     For i = 1 To 3
    
      b(i).sizable = True
    
      b(i).left = 10
    
     Next i
    
     '
    
     Me.Left = 10
    
     Me.Top = Me.Left
    
     Me.Width = 450
    
     Me.Height = 300
    
     End Sub
    
    
    
     'Sub b_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b(1).click, b(2).Click, b(3).Click
    
     ' bouton(3) = b(3)
    
     'End Sub
    
    End Class
    
    '
    
    

    Questions

    -1- Déja la déclaration logique, je ne sais pas où, ni même s'il faut y mettre un index b(3), et encore moins si on peut associer WithEvents avec Collection() ?

    Dim WithEvents b As New Collection()

    -2- Ensuite, sur Controls.AddRange il plante, refusant l'indice, j'ai aussi mis dans la liste de la collection "b.Add(...)", sans même savoir si c'est utile, et quelque que soit l'ordre de ces deux déclarations n'y change rien ?

    -3- Reste in fine la procédure du click (b.click), je ne sais pas si c'est ainsi dans ce cas, en plus à la fin, le rajout des 3 objets logiques est refusé (b(1).click, ... je ne sais comment faire ?

    Ben ça fait trois question, le mieux serait peut être de recopier le texte et de le lancer sur votre ordinateur, tout étant logique, ainsi on voit mieux les solution éventuelles ...

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Modifié EhJoe vendredi 4 mars 2011 10:16 modif 1 orthographe
    jeudi 3 mars 2011 22:01

Réponses

  • Joseph,

    Dans ce genre la ça le fait ou pas ?

    Public Class Form1
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim AllButton As New List(Of Button) With {.Capacity = 3}
        AllButton.Add(New Button With {.Name = "GrisV", .Top = 5, .Text = "Gris Vertical"})
        AllButton.Add(New Button With {.Name = "GrisH", .Top = 30, .Text = "Gris Horizontal"})
        AllButton.Add(New Button With {.Name = "RougeV", .Top = 60, .Text = "Rouge Vertical"})
    
        For i = 0 To AllButton.Count - 1
          AllButton(i).Left = 10
          AddHandler AllButton(i).Click, AddressOf EventAllButton
          Controls.Add(AllButton(i))
          ' Controls.AddRange(New System.Windows.Forms.Control() {AllButton(i)})
        Next
    
      End Sub
    
      Private Sub EventAllButton(ByVal sender As System.Object, ByVal e As System.EventArgs)
        MsgBox(sender.Name)
      End Sub
    End Class
    

     

     


    Cordialement,
    Xavier
    Alias Troxsa My M@iL
    • Marqué comme réponse EhJoe samedi 5 mars 2011 13:08
    vendredi 4 mars 2011 19:56
    Auteur de réponse
  • Bonjour Xavier,

    Merci beaucoup, reste plus qu'à l'essayer...

    Ben ... je ne risquais pas de trouver, y a des mots-clefs que je ne connaissais même pas, c'est du nouveau pour moi par rapport à vb6 ...

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Marqué comme réponse EhJoe samedi 5 mars 2011 13:09
    samedi 5 mars 2011 12:06

Toutes les réponses

  • Bonjour Joseph,

    L'idée sur ce que vous souhaitez faire c'est des contrôles dynamique avec des actions sur le double clique ?
    ou alors c'est de faire une collection de contrôle avec des actions sur le clique ?

    Quand vous géré des contrôles de façon dynamique il faut dans tout les cas les géré avec AddressOf et AddHandle si vous voulez de l'interaction dessus

    si c'est bien ce que vous voulez je ferais un exemple dessus ...

     


    Cordialement,
    Xavier
    Alias Troxsa My M@iL
    vendredi 4 mars 2011 14:26
    Auteur de réponse
  • Bonsoir Xavier,

    Ce que j'aimerais :

    Gérer une collection de contrôles button en création logique puis ensuite les recevoir dans une procédure click afin selon l'index d'effectuer certaines actions, donc les trois !

    Heu ... veux-tu me donner en te basant sur mon code un exemple total et concret qui tourne, sinon je ne risque pas de m'en sortir comme ça, je n'ai jamais fait ça (les trois mélangés) ?

    Merci, au plaisir, cordialement.

     

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    vendredi 4 mars 2011 18:17
  • Joseph,

    Dans ce genre la ça le fait ou pas ?

    Public Class Form1
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim AllButton As New List(Of Button) With {.Capacity = 3}
        AllButton.Add(New Button With {.Name = "GrisV", .Top = 5, .Text = "Gris Vertical"})
        AllButton.Add(New Button With {.Name = "GrisH", .Top = 30, .Text = "Gris Horizontal"})
        AllButton.Add(New Button With {.Name = "RougeV", .Top = 60, .Text = "Rouge Vertical"})
    
        For i = 0 To AllButton.Count - 1
          AllButton(i).Left = 10
          AddHandler AllButton(i).Click, AddressOf EventAllButton
          Controls.Add(AllButton(i))
          ' Controls.AddRange(New System.Windows.Forms.Control() {AllButton(i)})
        Next
    
      End Sub
    
      Private Sub EventAllButton(ByVal sender As System.Object, ByVal e As System.EventArgs)
        MsgBox(sender.Name)
      End Sub
    End Class
    

     

     


    Cordialement,
    Xavier
    Alias Troxsa My M@iL
    • Marqué comme réponse EhJoe samedi 5 mars 2011 13:08
    vendredi 4 mars 2011 19:56
    Auteur de réponse
  • Merci, pour cet exemple.

    J'ai juste modifié la boucle, mais c'est équivalent.

    For Each ElemButton As Button In AllButton
             ElemButton.Left = 10
             AddHandler ElemButton.Click, AddressOf EventAllButton
             Controls.Add(ElemButton)   
    Next

    Cordialement,

    samedi 5 mars 2011 08:27
  • Bonjour Xavier,

    Merci beaucoup, reste plus qu'à l'essayer...

    Ben ... je ne risquais pas de trouver, y a des mots-clefs que je ne connaissais même pas, c'est du nouveau pour moi par rapport à vb6 ...

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Marqué comme réponse EhJoe samedi 5 mars 2011 13:09
    samedi 5 mars 2011 12:06
  • Xavier, suite : Tout fonctionne à la perfection ... "ça c'est de l'exemple" ... bon ... reste plus qu'à comprendre, merci beaucoup :o)

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    samedi 5 mars 2011 13:08
  • Bonjour Joseph

    Si vous voulez des explications y a pas de problème ...

    Content que ça vous plaise :)

     

    A bientot


    Cordialement,
    Xavier
    Alias Troxsa My M@iL
    samedi 5 mars 2011 18:46
    Auteur de réponse
  • Bonjour tous

    Merci Xavier, ça fait un bout de temps que je cherche à créer un évènement commun à plusieurs contrôles genre collection en VB6,  AddHandler  m'a bien aider.

    Comme quoi ont critique beaucoup le .net mais c'est parce qu'ont ne le connaît pas.

    Pour la création des boutons j'emploi une boucle avec un Array pour les textes et je met dans le Tag un numéro ce qui permet de travailler par "Index"

    Cordialement 

    Louis

    lundi 21 novembre 2011 14:46
  • Bonjour Louis

    Y a pas de quoi, au plaisir :)

     

    A bientôt


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    lundi 21 novembre 2011 15:30
    Auteur de réponse