Bouton "indexé" [Résolu]

Signaler
Messages postés
7
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
29 décembre 2012
-
laurent.cpasmoi
Messages postés
7
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
29 décembre 2012
-
bonjour,

Je souhaiterais créer une série de bouton, nommé de A à Z avec un "indexage" de 1 à 24 par exemple de sort à pouvoir traiter en fonction du bouton cliquer l'action qui va bien :

if Button(i)_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) then
if i = 1 then msgbox ("bonjour")
if i = 2 then msgbox ("coucou")
....
if i = 24 then msgbox ("au revoir"
end if


Merci pour votre aide

3 réponses

Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
5
Bonjour,

Il faudra faire quelque chose du stye:

    Sub CreateButton()
        Dim MesButtons() As Button = New Button() {New Button(), New Button(), New Button()}

        For i As Integer = 0 To 2
            MesButtons(i).Name = "A" & i.ToString
            AddHandler MesButtons(i).Click, AddressOf Button_Click
        Next

    End Sub

    Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim buttonName As String = CType(sender, Button).Name
        Select Case Convert.ToInt32(Strings.Right(buttonName, buttonName.Length - 1))
            Case 0
                MsgBox("Titi")
            Case 1
                MsgBox("Tata")
            Case 2
                MsgBox("Toto")
        End Select

    End Sub
Messages postés
7
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
29 décembre 2012

Avec les explications de foliv57 et plusieurs itérations, cela fonctionne :
Sub CreateButton()
        For i As Integer = 0 To 2
            Me.MesButtons(i) = New System.Windows.Forms.Button()
            AddHandler MesButtons(i).Click, AddressOf Button_Click
            Me.MesButtons(i).Name = "A" & i.ToString
            Me.MesButtons(i).Location = New System.Drawing.Point(137 + i * 100, 56 + i * 10)
            Me.MesButtons(i).Size = New System.Drawing.Size(51, 52)
            Me.MesButtons(i).Text = "Z" & i.ToString
            Me.Controls.Add(Me.MesButtons(i))

        Next
        Me.SuspendLayout()

    End Sub

    Public Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim buttonName As String = CType(sender, Button).Name
        Select Case Convert.ToInt32(Strings.Right(buttonName, buttonName.Length - 1))
            Case 0
                MsgBox("Titi")
            Case 1
                MsgBox("Tata")
            Case 2
                MsgBox("Toto")
        End Select

    End Sub
Messages postés
7
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
29 décembre 2012

de mon coté, cela ne fonctionne pas, sur ta proposition j'ai réussi à créé les boutons comme cela :

Sub CreateButton()
Dim MesButtons() As Button = New Button() {New Button(), New Button(), New Button()}

For i As Integer = 0 To 2
Me.MesButtons(i) = New System.Windows.Forms.Button()
Me.MesButtons(i).Name = "A" & i.ToString
Me.MesButtons(i).Location = New System.Drawing.Point(137 + i * 100, 56 + i * 10)
Me.MesButtons(i).Size = New System.Drawing.Size(51, 52)
Me.MesButtons(i).Text = "Z" & i.ToString
Me.Controls.Add(Me.MesButtons(i))
AddHandler MesButtons(i).Click, AddressOf Button_Click
Next
Me.SuspendLayout()
End Sub

Par contre quand je clique sur les boutons créés, rien ne se passe... la fonction Button_Click (que j'ai mis en private ou public) n'est pas appelé :

Public Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim buttonName As String = CType(sender, Button).Name
MsgBox("Button_Click")
Select Case Convert.ToInt32(Strings.Right(buttonName, buttonName.Length - 1))
Case 0
MsgBox("Titi")
Case 1
MsgBox("Tata")
Case 2
MsgBox("Toto")
End Select
End Sub

des idées comment faire ?

Merci