J'ai beau fouiller dans le forum, je ne trouve pas la réponse à mon problème.
Lorsque je crée une liste d'objets
exemple:
Dim GroupeBoite As New List(Of GroupBox)
j'arrive à déposer des objets dans ma liste
GroupeBoite.Add(GroupBox1)
GroupeBoite.Add(GroupBox2)
...
Par contre, j'aurais voulu que lorsque je clique sur une des GroupBox de ma liste, je puisse déclancher une action sans devoir écrire cette action dans chaque GroupBox.
Pour l'instant je dois écrire quelquechose du genre:
Private Sub GroupBox1_Click(sender As Object, e As System.EventArgs) Handles GroupBox1.Click
Label1.Text = GroupBox1.Text
End Sub
Private Sub GroupBox2_Click(sender As Object, e As System.EventArgs) Handles GroupBox2.Click
Label1.Text = GroupBox2.Text
End Sub
...
Private Sub GroupBox30_Click(sender As Object, e As System.EventArgs) Handles GroupBox30.Click
Label1.Text = GroupBox30.Text
End Sub
Mais ayant une trentaine de GroupBox, j'aimerais arriver à quelquechose qui ressemblerait à:
Private Sub GroupeBoite_Click(sender As Object, e As System.EventArgs) Handles GroupBox1.Click
Label1.Text = GroupeBoite(i).Text '>> avec i qui serait récupéré lors du click
End Sub
ou bien une solution équivalente.
GroupeBoite n'apparaissant pas dans la liste des objets, je ne sais pas comment procéder.
La solution est sûrement très simple, mais je débute dans les listes. Merci de m'expliquer avec beaucoup de détails car je ne suis pas un pro de la programmation.
Option Strict On
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'on veut intégrer 11 groupbox au formulaire
For x = 10 To 0 Step -1
'nouveau groupbox
Dim box As New GroupBox
'nom position
box.Name = "box" & x.ToString
box.Left = x * 15
'abonnement à l'événement click
AddHandler box.Click, AddressOf box_click
'ajout au formulaire
Me.Controls.Add(box)
Next
MessageBox.Show("cliquer sur un groupbox")
End Sub
Private Sub box_click(ByVal sender As Object, ByVal e As EventArgs)
'il faut ici caster l'objet sender dans le bon type (qu'on connait) pour accéder
'à ses propriétés, méthodes etc...
MessageBox.Show(DirectCast(sender, GroupBox).Name & " vient d'etre cliqué")
End Sub
End Class
Par contre, j'aurais voulu que lorsque je clique sur une des GroupBox de ma liste, je puisse déclancher une action sans devoir écrire cette action dans chaque GroupBox.
C'est exactement ce que je t'ai proposé dans l'exemple de code.
L'as-tu testé en cliquant sur les groupbox ?
Si tu cherches à récupérer un index dans une List(Of ... , tu peux faire comme ceci :
Option Strict On
Public Class Form1
Dim Liste As New List(Of GroupBox)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For x = 10 To 0 Step -1
Dim box As New GroupBox
box.Name = "box" & x.ToString
box.Left = x * 15
AddHandler box.Click, AddressOf box_click
Liste.Add(box)
Me.Controls.Add(box)
Next
MessageBox.Show("cliquer sur un groupbox")
End Sub
Private Sub box_click(ByVal sender As Object, ByVal e As EventArgs)
Dim box As GroupBox = DirectCast(sender, GroupBox)
Dim index As Integer = Liste.IndexOf(box)
MessageBox.Show(index.ToString)
End Sub
End Class
Vous n’avez pas trouvé la réponse que vous recherchez ?
De rien
Jette quand même un coup d'oeil aux composants TableLayoutPanel et FlowLayoutPanel qui te permettent facilement de placer des contrôles (dynamiquement ou à la création) sur un formulaire ou d'y accéder sans se soucier des index.
Avec l'exemple c'est un peu plus clair. Mais je ne vois pas comment intégrer l'ensemble de mes éléments GroupeBoite dans le AddHandler.
Rappels du contenu de mon programme:
Dim GroupeBoite As New List(Of GroupBox)
GroupeBoite.Add(GroupBox1)
GroupeBoite.Add(GroupBox2)
...
Est-ce que je peux écrire:
for i=0 to 29
AddHandler GroupeBoite(i).Click, AddressOf ActionSiClick
Next i
On approche, mais avec DirectCast, j'arrive à récupérer le nom de l'objet sur lequel j'ai cliqué. Je cherche à obtenir le numéro de cet objet dans ma liste GroupeBoite. C'est sûrement tout bête, mais je ne trouve pas.
Merci. J'en prends note. J'ai commencé à regarder les composants TableLayoutPanel et FlowLayoutPanel.
Au premier abord, ça m'a l'air un peu compliqué et je ne sais pas encore ce que je pourrais en tirer. Mais je suppose qu'après avoir regardé d'un peu plus près, ça me paraîtra plus facile et très intéressant.