Creation d'objet bouton dans un groupe de controle [Résolu]

Signaler
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
-
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
-
Bonjour,
J'ai un petit soucis ^^
L'utilisateur remplit un textbox avec un entier et appui sur un bouton Valider
Nous créons n textbox et n boutons.
Je voudrais que lors d'un appui sur un de ces n boutons lancer un algo ou le numero de bouton change le resultat
quelques chose de ce genre

/*C'est juste pour tester si le bouton indexé en 0 est appuyé*/
Private Sub Cmdi_Click(iIndex)
    if(iIndex==0)then
       Text2.text=0
    end if
End Sub

Voici le code utilisé pour creer un bouton:

Private Sub createTextBox(ByRef obj As Object, _
                ByVal name As String, ByVal top As Integer, _
                ByVal left As Integer, ByVal text As String, _
                ByVal height As Integer, ByVal width As Integer, _
                ByRef frm As Object)

    Set obj = Form2.Controls.Add("vb.textBox", name, frm)
    
    With obj
        .Visible = True
        .top = top
        .left = left
        .text = text
        .height = height
        .width = width
    End With
    col.Add obj
   
End Sub

Et voici comment je l'utilise:

Private Sub nValide_Click()
    iIndexN = TextN.text
    For iIndexText = 1 To iIndexN
        Call createCommandButton(objLbl, "Cmdi" & CStr(iIndexText), 300 * iIndexText, 150, "Dessine", 200, 700, Form2.Frame6)
    Next iIndexText
End Sub

alors ma question comment faire pour resoudre mon probleme? est ce que un groupe de controle le resoudrais? Comment faire pour mettre mon bouton en groupe de controle ?
Merci
--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

10 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Salut,
Voici un petit projet test.
OUvre un nouveau projet ajoute y un TextBox et un CommandButton (ne les renomme pas on gagne du temps)

puis colle ce code appui sur F5 puis sur le bouton.
ensuite sur les autre bouton apparu et ensuite étudie le code.
Si tu as des problème de compréhension google, MSDN, Vbfrance

Option Explicit 

Private Sub Command1_Click(Index As Integer) 
    If Index =  0 Then 
        Call LoadObjects( CInt (Text1(0).Text)) 
    Else 
        Text1(Index).Text  = CStr(Index) 
    End If 

End Sub 

Private Sub LoadObjects(ByVal NumObjects As Integer) 
'Décharge les objets éventuellemnts chargés.
Dim i As Integer 
    For i =  Command1.UBound To 1 Step -1 
        'On décharge le bouton
        Call Unload(Command1(i)) 
        'On décharge le text box
        Call Unload(Text1(i)) 
    Next i 

    For i = 1 To NumObjects 
        Call LoadObject(Command1()) 
        Call LoadObject(Text1()) 
    Next 
End Sub 

Private Sub LoadObject(ByRef Obj As Object) 
    'On charge le bouton
    Call  Load (Obj(Obj.UBound + 1)) 
    'On définit ces propriétés
    With Obj(Obj.UBound) 
        .Left  = Obj(0).Left 
        .Top = Obj(Obj.UBound - 1).Top + Obj(Obj.UBound - 1).Height + 25 
        .Visible = True 
        'Si c'est un textbox on vide le contenu
        If TypeOf Obj(Obj.UBound) Is TextBox Then .Text = "" 
    End With 
End Sub 

Private Sub Form_Load() 
    Text1(0).Text = "3" 
End Sub 

note: la prochaine fois essaie de poster au bon endroit dans le forum. si tu es en VB6 tu n'as pas besoin de poste dans
[infomsg.aspx Thèmes] / [infomsgf_VB-NET-VB-2005_40.aspx VB.NET et VB 2005]
Plus tu seras précis plus les réponses aussi le seront.
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Salut,
Premiere question de ma part, est tu réellement sur VB .NET ou bien sur VB6

Car je crois (que les experts me corrigent) que en .NET les groupe de contrôle n'existe plus.
Si tu es en VB6 rien de plus facile (en revanche .NET je pourrais pas te dire)

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
Oups oui petit oubli je suis en VB6

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Tout à fait Julien, en .Net, les groupes de controles n'existe plus de manière automatique. Il faut les recreer manuellement à l'aide des collections.

Mais vu le code de notre ami, il est en VB6

Teclis01, pour résoudre ton problème, effectivement les groupes de controles peuvent t'aider.

Modifie légèrement ta fonction de création des boutons. Il te faut passer l'index en argument.
Ensuite tu donne strictement le même nom à chacun de tes boutons et tu associe ton index à la propriété .Index du bouton que tu crée.

Ensuite dans la routine de gestion de l'évènement, tu n'auras plus qu'a récupérer l'index du bouton clicqué pour savoir lequel c'est

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
je viens d essayer de modifier ainsi
Private Sub createTextBox(ByRef obj As Object, _
                ByVal name As String, ByVal top As Integer, _
                ByVal left As Integer, ByVal text As String, _
                ByVal height As Integer, ByVal width As Integer, _
                ByRef frm As ObjectByVal index As Integer)

    Set obj = Form2.Controls.Add("vb.textBox", name, frm)
    
    With obj
        .Visible = True
        .top = top
        .left = left
        .text = text
        .height = height
        .width = width
       .index= index
    End With
    col.Add obj
   
End Sub

Private Sub nValide_Click()
    iIndexN = TextN.text
    For iIndexText = 1 To iIndexN
   
    Call createCommandButton(objLbl, "Cmdi" & CStr(iIndexText), 300
* iIndexText, 150, "Dessine", 200, 700, Form2.Frame6,0)
    Next iIndexText
End Sub

Mais ça ne marche pas il me dit que index ne peut défini au moment de l execution :/
--------------------------------------------------------------------------------------------------
         Ilvaut mieux poser une question et passer pour bête que le rester toutesa vie
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
Je viens d'enlever les noms "dynamique" et toujours la meme erreur :/

ca vient du fait que je "crée" le bouton avant de definir son index donc je suppose d'ici

Set obj = Form2.Controls.Add("vb.textBox", name, frm)
-----------------------------------------------------------------------------
    With obj
        .Visible = True
        .top = top
        .left = left
        .text = text
        .height = height
        .width = width
       .index= index
    End With
    col.Add obj

--------------------------------------------------------------------------------------------------
         Ilvaut mieux poser une question et passer pour bête que le rester toutesa vie
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Bonjour à tous,


Je suis pas expert, ton message d'erreur je pense que c'est un appel de ton index qui n'exite pas encore, car tu est entraint de créer jsutement ton objet.


A+


Eexploreur
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Pardon, post croisés


A+


Exploreur
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
Du coup ma question devient:

Comment faire un objet commandbutton en definissant ses attributs dès l instanciation ?
Merci
--------------------------------------------------------------------------------------------------
         Ilvaut mieux poser une question et passer pour bête que le rester toutesa vie
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
Merci et désolé j'ai vraiment pas fait gaffe ou j'ai posté :/

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie