Création de combobox automatiquement et liaison "conditionnelle"

Résolu
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011 - 29 août 2010 à 16:41
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 5 sept. 2010 à 17:48
Bonjour

Je suis désolé tout d'abord si un forum sur ce sujet existe déjà.

Je suis en train de coder un petit programme, qui dans un certain module, en cliquant sur un bouton "ajout", m'ajoute des lignes à partir d'une ligne initiale. Jusque là aucun soucis. Par contre, je souhaite que, sur cette ligne, suivant ce qui est choisi dans la première combobox, les items (collection) dans une seconde soit différents.

Je m'explique avec le code suivant :

ceci me permet de créer une ligne supplémentaire lors d'un click sur le bouton, puis une autre, tant que l'on appuie.

Private Sub Button8_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
i = i + 1
j = 100 + i
k = 200 + i
l = 300 + i
m = 400 + i

Dim Richtextbox As System.Windows.Forms.RichTextBox
Dim Textbox(i) As System.Windows.Forms.TextBox
Dim Richtextbox1(k) As System.Windows.Forms.RichTextBox
Dim Combobox As System.Windows.Forms.ComboBox
Dim combobox1 As System.Windows.Forms.ComboBox
Dim combobox2(k) As System.Windows.Forms.ComboBox
Dim combobox3(l) As System.Windows.Forms.ComboBox
Dim combobox4(m) As System.Windows.Forms.ComboBox
Dim Familles() As String = {"", "toto", "tata", "titi"}
Dim Type_toto() As String {"Type 1 20 h", "Type 2 = 40 h", "Type 3 = 80 h", "Type 4 = 160 h", "Type 5 = 240 h"}
Dim Type_tata() As String {"Type 1 8 h", "Type 2 = 16 h", "Type 3 = 40 h", "Type 4 = 60 h", "Type 5 = 80 h"}
Dim Type_titi() As String {"Type 1 4 h", "Type 2 = 8 h", "Type 3 = 16 h", "Type 4 = 40 h", "Type 5 = 60 h"}

Richtextbox = New System.Windows.Forms.RichTextBox
Textbox(i) = New System.Windows.Forms.TextBox
Richtextbox1(k) = New System.Windows.Forms.RichTextBox
Combobox = New System.Windows.Forms.ComboBox
combobox1 = New System.Windows.Forms.ComboBox
combobox2(k) = New System.Windows.Forms.ComboBox
combobox3(l) = New System.Windows.Forms.ComboBox
combobox4(m) = New System.Windows.Forms.ComboBox

b = SplitContainer1.Height

If i = 1 Then

Richtextbox.Name = ("Richtextbox" & i)
Richtextbox.Visible = True
Richtextbox.Top = RichTextBox0.Top + 40
Richtextbox.Left = RichTextBox0.Left
Richtextbox.Height = RichTextBox0.Height
Richtextbox.Width = RichTextBox0.Width
Richtextbox.TabIndex = 0
Richtextbox.Multiline = True
Richtextbox.SelectionFont = New Font("Arial", 9, FontStyle.Bold)

Combobox.Name = "Combobox" & i
Combobox.Visible = True
Combobox.Top = ComboBox0.Top + 40
Combobox.Left = ComboBox0.Left
Combobox.Height = ComboBox0.Height
Combobox.Width = ComboBox0.Width
Combobox.TabIndex = 0
Combobox.DropDownStyle = ComboBoxStyle.DropDownList
Combobox.DataSource = Familles

combobox1.Name = "Combobox" & (j)
combobox1.Visible = True
combobox1.Top = ComboBox100.Top + 40
combobox1.Left = ComboBox100.Left
combobox1.Height = ComboBox100.Height
combobox1.Width = ComboBox100.Width
combobox1.TabIndex = 0
combobox1.DropDownStyle = ComboBoxStyle.DropDownList

combobox2(k).Visible = True
combobox2(k).Top = ComboBox200.Top + 40
combobox2(k).Left = ComboBox200.Left
combobox2(k).Name = "Combobox" & (k)
combobox2(k).Height = ComboBox200.Height
combobox2(k).Width = ComboBox200.Width
combobox2(k).TabIndex = 0
combobox2(k).DropDownStyle = ComboBoxStyle.DropDownList

combobox3(l).Visible = True
combobox3(l).Top = ComboBox300.Top + 40
combobox3(l).Left = ComboBox300.Left
combobox3(l).Name = "Combobox" & (l)
combobox3(l).Height = ComboBox300.Height
combobox3(l).Width = ComboBox300.Width
combobox3(l).TabIndex = 0
combobox3(l).DropDownStyle = ComboBoxStyle.DropDownList

combobox4(m).Visible = True
combobox4(m).Top = ComboBox400.Top + 40
combobox4(m).Left = ComboBox400.Left
combobox4(m).Name = "Combobox" & (m)
combobox4(m).Height = ComboBox400.Height
combobox4(m).Width = ComboBox400.Width
combobox4(m).TabIndex = 0
combobox4(m).DropDownStyle = ComboBoxStyle.DropDownList

Richtextbox1(k).Visible = True
Richtextbox1(k).Top = RichTextBox200.Top + 40
Richtextbox1(k).Left = RichTextBox200.Left
Richtextbox1(k).Name = "Richtextbox" & i
Richtextbox1(k).Height = RichTextBox200.Height
Richtextbox1(k).Width = RichTextBox200.Width
Richtextbox1(k).TabIndex = 0

Textbox(i).Visible = True
Textbox(i).Top = TextBox0.Top + 40
Textbox(i).Left = TextBox0.Left
Textbox(i).Name = "textbox" & i
Textbox(i).Height = TextBox0.Height
Textbox(i).Width = TextBox0.Width
Textbox(i).TabIndex = 0
Textbox(i).BackColor = Color.WhiteSmoke
Textbox(i).ReadOnly = True

'Richtextbox(i).Text = "Commentaires..."
'Richtextbox(i).ForeColor = Color.DarkGray

SplitContainer1.Panel1.Controls.Add(Richtextbox)

SplitContainer2.Panel1.Controls.Add(Combobox)
SplitContainer3.Panel1.Controls.Add(combobox1)
SplitContainer4.Panel1.Controls.Add(combobox2(k))
SplitContainer4.Panel2.Controls.Add(combobox3(l))
SplitContainer5.Panel1.Controls.Add(combobox4(m))
SplitContainer5.Panel2.Controls.Add(Richtextbox1(k))
SplitContainer5.Panel2.Controls.Add(Textbox(i))
a = Richtextbox.Top

Else
Richtextbox.Visible = True
Richtextbox.Top = a + 40
Richtextbox.Left = RichTextBox0.Left
Richtextbox.Name = "Richtextbox" & i
Richtextbox.Height = RichTextBox0.Height
Richtextbox.Width = RichTextBox0.Width
Richtextbox.TabIndex = 0
Richtextbox.SelectionFont = New Font("Arial", 9, FontStyle.Bold)

Combobox.Visible = True
Combobox.Top = a + 40
Combobox.Left = ComboBox0.Left
Combobox.Name = "combobox" & i
Combobox.Height = ComboBox0.Height
Combobox.Width = ComboBox0.Width
Combobox.TabIndex = 0
Combobox.DropDownStyle = ComboBoxStyle.DropDownList
Combobox.DataSource = Familles

combobox1.Visible = True
combobox1.Top = a + 40
combobox1.Left = ComboBox100.Left
combobox1.Name = "combobox" & (j)
combobox1.Height = ComboBox100.Height
combobox1.Width = ComboBox100.Width
combobox1.TabIndex = 0
combobox1.DropDownStyle = ComboBoxStyle.DropDownList

combobox2(k).Visible = True
combobox2(k).Top = a + 40
combobox2(k).Left = ComboBox200.Left
combobox2(k).Name = "combobox" & (k)
combobox2(k).Height = ComboBox200.Height
combobox2(k).Width = ComboBox200.Width
combobox2(k).TabIndex = 0
combobox2(k).DropDownStyle = ComboBoxStyle.DropDownList

combobox3(l).Visible = True
combobox3(l).Top = a + 40
combobox3(l).Left = ComboBox300.Left
combobox3(l).Name = "combobox" & (l)
combobox3(l).Height = ComboBox300.Height
combobox3(l).Width = ComboBox300.Width
combobox3(l).TabIndex = 0
combobox3(l).DropDownStyle = ComboBoxStyle.DropDownList

combobox4(m).Visible = True
combobox4(m).Top = a + 40
combobox4(m).Left = ComboBox400.Left
combobox4(m).Name = "combobox" & (m)
combobox4(m).Height = ComboBox400.Height
combobox4(m).Width = ComboBox400.Width
combobox4(m).TabIndex = 0
combobox4(m).DropDownStyle = ComboBoxStyle.DropDownList

Richtextbox1(k).Visible = True
Richtextbox1(k).Top = a + 40
Richtextbox1(k).Left = RichTextBox200.Left
Richtextbox1(k).Name = "Richtextbox" & i
Richtextbox1(k).Height = RichTextBox200.Height
Richtextbox1(k).Width = RichTextBox200.Width
Richtextbox1(k).TabIndex = 0

Textbox(i).Visible = True
Textbox(i).Top = a + 40
Textbox(i).Left = TextBox0.Left
Textbox(i).Name = "textbox" & i
Textbox(i).Height = TextBox0.Height
Textbox(i).Width = TextBox0.Width
Textbox(i).TabIndex = 0
Textbox(i).BackColor = Color.WhiteSmoke
Textbox(i).ReadOnly = True

SplitContainer1.Height = b + 40
SplitContainer5.Height = b + 40
SplitContainer2.Height = b + 40
SplitContainer3.Height = b + 40
SplitContainer1.Panel1.Controls.Add(Richtextbox)
SplitContainer2.Panel1.Controls.Add(Combobox)
SplitContainer3.Panel1.Controls.Add(combobox1)
SplitContainer4.Panel1.Controls.Add(combobox2(k))
SplitContainer4.Panel2.Controls.Add(combobox3(l))
SplitContainer5.Panel1.Controls.Add(combobox4(m))
SplitContainer5.Panel2.Controls.Add(Richtextbox1(k))
SplitContainer5.Panel2.Controls.Add(Textbox(i))
a = Richtextbox.Top
b = SplitContainer1.Height
End If

End Sub

jusque là ca marche.

par contre dès que je sélectionne par exemple toto dans la Combobox1 ((Combobox & i) avec i 1), combobox créer par un premier click sur "ajout", il faudrait que la combobox100 (= (Combobox & j) avec j = 100) soit le type_toto.

Or j'arrive à faire ceci pour la première ligne (ligne toujours présente) avec la commande :

Public Sub ComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox0.SelectedIndexChanged
Dim Type_toto() As String {"Type 1 20 h", "Type 2 = 40 h", "Type 3 = 80 h", "Type 4 = 160 h", "Type 5 = 240 h"}
Dim Type_tata() As String {"Type 1 8 h", "Type 2 = 16 h", "Type 3 = 40 h", "Type 4 = 60 h", "Type 5 = 80 h"}
Dim Type_titi() As String {"Type 1 4 h", "Type 2 = 8 h", "Type 3 = 16 h", "Type 4 = 40 h", "Type 5 = 60 h"}
If ComboBox0.Text = "toto" Then
ComboBox100.Refresh()
ComboBox100.DataSource = Type_toto
ElseIf ComboBox0.Text = "tata" Then
ComboBox100.Refresh()
ComboBox100.DataSource = Type_tata
ElseIf ComboBox0.Text = "titi" Then
ComboBox100.Refresh()
ComboBox100.DataSource = Type_titi
End If
End Sub


Par contre pour toutes les autres combobox générées automatiquement, je n'arrive pas à écrire le même type d'action "général".

du genre

Public Sub ComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ("ComboBox" & i).SelectedIndexChanged
Dim Type_toto() As String {"Type 1 20 h", "Type 2 = 40 h", "Type 3 = 80 h", "Type 4 = 160 h", "Type 5 = 240 h"}
Dim Type_tata() As String {"Type 1 8 h", "Type 2 = 16 h", "Type 3 = 40 h", "Type 4 = 60 h", "Type 5 = 80 h"}
Dim Type_titi() As String {"Type 1 4 h", "Type 2 = 8 h", "Type 3 = 16 h", "Type 4 = 40 h", "Type 5 = 60 h"}
If ("ComboBox" & i).Text = "toto" Then
("ComboBox" & j).Refresh()
("ComboBox" & j).DataSource = Type_toto
ElseIf ("ComboBox" & i).Text = "tata" Then
("ComboBox" & j).Refresh()
("ComboBox" & j).DataSource = Type_tata
ElseIf ("ComboBox" & i).Text = "titi" Then
("ComboBox" & j).Refresh()
("ComboBox" & j).DataSource = Type_titi
End If
End Sub


Quelqu'un pourrait il m'aider ?

J'espère avoir été assez clair.

Merci énormément du temps que vous passerez à me répondre.

A+

Neolive

23 réponses

neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
30 août 2010 à 22:10
Excellentissime !!!!

merci ça marche nikel.

Neolive
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
31 août 2010 à 17:38
Salut
Pour l'instant je t'envoies un nouveau code
Public Class Form1
    Private countercombo As Integer
    Private panels() As System.Windows.Forms.Panel
    Private measure As System.Windows.Forms.Label
    Private listtype() As System.Windows.Forms.ListBox
    'declare 2 vecteur dynamique de combobox la taille(size) du vecteur n'est pas fixé
    Private combobox0() As System.Windows.Forms.ComboBox
    Private combobox100() As System.Windows.Forms.ComboBox
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        countercombo = 0
        measure = New Label
        measure.Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
        measure.TextAlign = ContentAlignment.MiddleCenter
        Me.WindowState = FormWindowState.Maximized

        PreparecomboAndPanel()
    End Sub

    Private Sub PreparecomboAndPanel()
        Dim item As String
        'creer le vecteur panel
        ReDim panels(countercombo)
        panels(countercombo) = New Panel
        Me.Controls.Add(panels(countercombo))
        'creer les 2 combo de base et fixé la taille intitialle du vecteur 
        ReDim combobox0(countercombo)
        ReDim combobox100(countercombo)
        ReDim listtype(countercombo)
        combobox0(countercombo) = New ComboBox
        combobox100(countercombo) = New ComboBox
        listtype(countercombo) = New ListBox
        ajoutes.Location = New Point(4, 4)
        'ajouter les combo à la panel
        panels(countercombo).Controls.Add(listtype(countercombo))
        panels(countercombo).Controls.Add(combobox0(countercombo))
        panels(countercombo).Controls.Add(combobox100(countercombo))
        With combobox0(countercombo)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            .Items.Add("titi")
            .Items.Add("tata")
            .Items.Add("toto")
            .BackColor = Color.Azure
            .Anchor = AnchorStyles.Left
            measure.Text = "tata"
            .Location = New Point(4, 4)
            .Width = measure.PreferredWidth * 2
            .Visible = True
            .Tag = countercombo
            'déclarer le event SelectedIndexChanged pour le combo
            AddHandler .SelectedIndexChanged, AddressOf combobox0_SelectedIndexChanged
        End With
        With combobox100(countercombo)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            For Each item In combobox0(countercombo).Items
                .Items.Add("type" & (item))
            Next
            .Anchor = AnchorStyles.Left
            .Location = New Point(combobox0(countercombo).Right + 10, combobox0(countercombo).Top)
            measure.Text = "typetata"
            .Width = measure.PreferredWidth * 2
            .Tag = countercombo
            .Visible = False
        End With
        With listtype(countercombo)
            .Anchor = AnchorStyles.Left
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            .Location = New Point(combobox100(countercombo).Right + 10, combobox100(countercombo).Top)
            .BorderStyle = BorderStyle.Fixed3D
            .Visible = False
        End With
        With panels(countercombo)
            .Anchor = AnchorStyles.None
            .BorderStyle = BorderStyle.Fixed3D
            .Location = New Point(10, ajoutes.Bottom + 6)
            .Width = combobox0(countercombo).Width + combobox100(countercombo).Width + listtype(countercombo).Width + 10
            .BackColor = Color.LemonChiffon
            .Visible = True
        End With

    End Sub

    Private Sub ajoutes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ajoutes.Click
        Dim item As String
        countercombo = countercombo + 1
        'ajouter le combo à son vecteur le reserved word "preserve" indique qu'on aggrandit le vecteur
        'sans  effacer l'ancien 
        ReDim Preserve panels(countercombo)
        ReDim Preserve combobox0(countercombo)
        ReDim Preserve combobox100(countercombo)
        ReDim Preserve listtype(countercombo)
        panels(countercombo) = New Panel
        Me.Controls.Add(panels(countercombo))
        combobox0(countercombo) = New ComboBox
        combobox100(countercombo) = New ComboBox
        listtype(countercombo) = New ListBox
        panels(countercombo).Controls.Add(combobox0(countercombo))
        panels(countercombo).Controls.Add(combobox100(countercombo))
        panels(countercombo).Controls.Add(listtype(countercombo))
        With combobox0(countercombo)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            For Each item In combobox0(0).Items
                combobox0(countercombo).Items.Add(item)
            Next
            .BackColor = Color.Azure
            .Anchor = AnchorStyles.Left
            .Location = New Point(4, 4)
            measure.Text = "tata"
            .Width = measure.PreferredWidth * 2
            .Tag = countercombo
            .Visible = True
            AddHandler .SelectedIndexChanged, AddressOf combobox0_SelectedIndexChanged
        End With
        With combobox100(countercombo)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            For Each item In combobox100(0).Items
                combobox100(countercombo).Items.Add(item)
            Next
            .Anchor = AnchorStyles.Left
            .Location = New Point(combobox0(0).Right + 10, combobox0(0).Top)
            measure.Text = "typetata"
            .Width = measure.PreferredWidth * 2
            .Tag = countercombo
            .Visible = False
        End With
        With listtype(countercombo)
            .Anchor = AnchorStyles.Left
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            .Location = New Point(combobox100(countercombo).Right + 10, combobox100(countercombo).Top)
            .BorderStyle = BorderStyle.Fixed3D
            .Visible = False
        End With
        With panels(countercombo)
            .Anchor = AnchorStyles.None
            .BorderStyle = BorderStyle.Fixed3D
            .Location = New Point(10, panels(countercombo - 1).Bottom + 30)
            .Width = combobox0(countercombo).Width + combobox100(countercombo).Width + listtype(countercombo).Width + 10
            .BackColor = Color.LemonChiffon
            .Visible = True
        End With
        

    End Sub
    Private Sub combobox0_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim iter As Byte
        combobox100(sender.tag).Text = "type" & combobox0(sender.tag).Text
        combobox100(sender.tag).Visible = True
        listtype(sender.tag).Items.Clear()
        Select Case combobox0(sender.tag).SelectedItem
            Case "toto"
                listtype(sender.tag).Items.Add(combobox100(sender.tag).SelectedItem)
                For iter = 1 To 3
                    listtype(sender.tag).Items.Add("type" & " " & iter)
                Next
            Case "tata"
                listtype(sender.tag).Items.Add(combobox100(sender.tag).SelectedItem)
                For iter = 4 To 6
                    listtype(sender.tag).Items.Add("type" & " " & iter)
                Next
            Case "titi"
                listtype(sender.tag).Items.Add(combobox100(sender.tag).SelectedItem)
                For iter = 7 To 9
                    listtype(sender.tag).Items.Add("type" & " " & iter)
                Next
        End Select
        measure.Text = "type 8"
        listtype(sender.tag).Width = measure.PreferredWidth * 2
        listtype(sender.tag).Visible = True
    End Sub

End Class



à propos du data source je ne jamais utilisé
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
1 sept. 2010 à 09:05
Salut

Merci je ne suis encore que débutant en j'en ai encore pour longtemps
je ne suis pas encore Lucky luck qui programme plus vite que son ombre lol
le code que j'ai envoyé est incomplet
il manque l'évenement
AddHandler .SelectedIndexChanged, AddressOf combobox100_SelectedIndexChanged

bonne continuation
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
29 août 2010 à 20:31
Salut
C'est du vb.net et pas vb6
J'espère avoir été assez clair.
Tu n'aurais pas un code un peu plus long? LOL
Que veux tu faire je n'ai pas compris
Tu as plusieurs controls combobox,richtextbox,textbox etc...
un command button quand tu clicks dessus
que doit t'il se passer?
essayes de décrire en détails comme ça on pourra
t'aider
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
29 août 2010 à 22:53
Je te précise tout ça dans la semaine.

Merci déjà pour l'info de vb.net et non vb6 car je pensais coder en vb6

a+

neolive
0
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
30 août 2010 à 00:12
Alors je t'explique ce que je souhaite faire.

Tout d'abord merci pour le temps que tu passes à résoudre mon soucis.

J'ai donc un form avec 2 combobox de nom combobox0 et combobox100 qui existe à la base.

En fonction de ce que je choisis dans la première (soit toto, tata ou titi par exemple) la deuxième (combobox100) affiche type_toto, type_tata ou type_titi, qui se déclinent en liste de choix.

Ensuite en cliquant sur un bouton, je crée une deuxième ligne identique à la première.

Seulement les combobox s'appelle combobox1 et combobox101.

Du coup je cherche à écrire les même relation entre les deux combobox nouvellement créées que pour celles existantes à la base. C'est à dire que quand je choisis dans la combobox1 toto par exemple, que la combobox101 me donne le type_toto.

Ce que je n'arrive pas à faire pour les combobox créés automatiquement.

As tu une idée ?

Merci encore.

Neolive
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
30 août 2010 à 15:50
Bonjour
C'est déja mieux
voila un 1 er code
sur la form ajoutes seulement
un bouton nommé ajoutes il n'y a pas de combobox
il sont crées at runtime

Public Class Form1
    Private countercombo As Integer
    'declare 2 vecteur dynamique de combobox la taille(size) du vecteur n'est pas fixé
    Private combobox0() As System.Windows.Forms.ComboBox
    Private combobox100() As System.Windows.Forms.ComboBox
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        countercombo = 0
        Preparecombo()
    End Sub

    Private Sub Preparecombo()
        Dim item As String
        'creer les 2 combo de base et fixé la taille intitialle du vecteur 
        ReDim combobox0(countercombo)
        ReDim combobox100(countercombo)
        combobox0(countercombo) = New ComboBox
        combobox100(countercombo) = New ComboBox
        'ajouter les combo à la form 
        Me.Controls.Add(combobox0(countercombo))
        Me.Controls.Add(combobox100(countercombo))
        With combobox0(countercombo)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            .Items.Add("titi")
            .Items.Add("tata")
            .Items.Add("toto")
            .BackColor = Color.Azure
            .Anchor = AnchorStyles.None
            .Location = New Point(30, 10)
            .Width = 80
            .Visible = True
            .Tag = countercombo
            'déclarer le event SelectedIndexChanged pour le combo
            AddHandler .SelectedIndexChanged, AddressOf combobox0_SelectedIndexChanged
        End With
        With combobox100(countercombo)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            For Each item In combobox0(0).Items
                .Items.Add("type" & (item))
            Next
            .Anchor = AnchorStyles.None
            .Location = New Point(combobox0(0).Right + 50, combobox0(0).Top)
            .Width = 120
            .Tag = countercombo
            .Visible = False
        End With
    End Sub

    Private Sub ajoutes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ajoutes.Click
        Dim item As String
        countercombo = countercombo + 1
        'ajouter le combo à son vecteur le reserved word "preserve" indique qu'on aggrandit le vecteur
        'sans  effacer l'ancien 
        ReDim Preserve combobox0(countercombo)
        ReDim Preserve combobox100(countercombo)
        combobox0(countercombo) = New ComboBox
        combobox100(countercombo) = New ComboBox
        Me.Controls.Add(combobox0(countercombo))
        Me.Controls.Add(combobox100(countercombo))
        With combobox0(countercombo)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            For Each item In combobox0(0).Items
                combobox0(countercombo).Items.Add(item)
            Next
            .BackColor = Color.Azure
            .Anchor = AnchorStyles.None
            .Location = New Point(30, 10)
            .Width = 80
            .Tag = countercombo
            .Visible = True
            AddHandler .SelectedIndexChanged, AddressOf combobox0_SelectedIndexChanged
        End With
        With combobox100(countercombo)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            For Each item In combobox100(0).Items
                combobox100(countercombo).Items.Add(item)
            Next
            .Anchor = AnchorStyles.None
            .Location = New Point(combobox0(0).Right + 50, combobox0(0).Top)
            .Width = 120
            .Tag = countercombo
            .Visible = False
        End With
        combobox0(countercombo).Location = New Point(combobox0(0).Left, combobox0(countercombo - 1).Bottom + 10)
        combobox100(countercombo).Location = New Point(combobox100(0).Left, combobox100(countercombo - 1).Bottom + 10)

    End Sub
    Private Sub combobox0_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        combobox100(sender.tag).Text = "type" & combobox0(sender.tag).Text
        combobox100(sender.tag).Visible = True
    End Sub
End Class
0
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
31 août 2010 à 10:35
J'ai encore une petite question à te poser sur autre chose.

Disons que le code que tu m'as fourni sert à me créer (de façon nikel!!!) des combobox dans un panel particulier (par exemple panel1).

Je souhaiterais maintenant pourvoir cliquer sur un bouton ajouter, et que cela me créer un panel 2, identique au premier en terme de code (combobox dépendante avec les mêmes menus ? puis si je clique une deuxième fois, un panel 3 etc... indéfiniment.

Aurais tu une idée ?

Merci encore.

Neolive
0
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
31 août 2010 à 12:50
ShayW

J'aurai quelques questions à te poser sur le code que tu m'as transmis.

Quand je clique sur la combobox0 et que j'affiche toto ==> combobox100 = typetoto.

Or j'aimerai pouvoir afficher les valeurs contenues dans typetoto.
Je m'explique :

("type" & item) est une succession de choix du type :

typetoto = type 1
type 2
type 3

typetata = type 4
type 5
type 6

et typetiti = type 7
type 8
type 9

par exemple...

Du coup quand je choisis toto dans la combobox0(countercombo), j'aimerai que la combobox100(countercombo) affiche type 1, type 2 et type 3 en liste.

J'ai essayé en appliquant un .datasource sur la combobox100(countercombo), mais il me donne un message d'erreur. Peux tu m'expliquer pourquoi ?

Merci encore beaucoup pour ton aide.

Neolive
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
31 août 2010 à 14:33
Salut
Regardes tu as des controls qui sont des container control comme form picturebox panel
etc
ces controls peuvent contenir d'autres controls
dans le code que j'ai fourni les comboboxes sont
ajoutés à la form
Me.Controls.Add(combobox0(countercombo))
maintenant tu veux que les comboboxes dans un
panel c.a.d combo tata titi et combo typetata dans le meme panel
donc il déclarer un vecteur de type panel
ajouter à la form et ajouter les comboboxes
dans la panel tout cela dynamiquement on runtime
En fait tes comboboxes typetiti ne sert à rien
puisque tout se joue avec le l'autre combo
et tu t'en sert jamais du combotype
pourquoi ne pas afficher le tout dans un listbox
si j'ai choisi titi -> typetiti
type = 7
type = 8
0
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
31 août 2010 à 17:15
Tout d'abord merci bien pour ta réponse.

Ensuite, je ne pense pas m'être exprimé correctement.

Ce que je n'arrive pas à faire est la chose suivante (au risque de t'embêter encore un peu...)

disons que j'ai deux combobox :

Le première (combobox0) dans laquelle je peux choisir dans une liste 3 choix (toto, tata et titi).
Ce que je veux obtenir est que la liste de choix de la deuxième (combobox100) soit directement liée au choix de la première.

C'est à dire que lorsque je choisis toto dans la première, je souhaiterais avoir une liste de choix dans la seconde composée de " Type 1 , type 2 et type 3 " (par exemple.).

Par contre qd je choisis tata dans la première, je souhaiterais avoir une liste de choix composée dans la seconde de " type 4, type 5 et type 6". Par exemple.

En fait je voudrais que la liste des items de la combobox100 que l'on peut choisir, soit directement lié au choix de la combobox0.

Et ainsi, quand on a rien choisi dans la combobox0, que aucun choix n'apparaisse dans la combobox100.

Merci encore beaucoup de ton aide

Neolive
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
31 août 2010 à 17:48
Salut encore
justement d'après ta ton explication combobox100
ne sert à rien tu peux mettre à la place un label
tu places 2 comboboxes mais le choix se fait toujours selon un combobox à quoi sert la deuxieme ?
0
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
31 août 2010 à 19:07
ShayW

Super balaise ton code. Tu codes aussi vite que ton ombre !!! merci énormément !!!

En fait, pour t'expliquer un peu, mon premier combobox sert à choisir un type d'analyses (mécanique). Par exemple, analyses dynamiques. Et ma deuxième me sert à choisir une volume horaire associé. Par exemple 20h.

en fait ma form est ainsi.
Premièrement tu choisis la phase (par exemple préliminaire)

J'ai une richtextbox pour le nom de la matière : par exemple, "conception de la virole centrale" ensuite j'ai une combobox0 dans laquelle je choisis la famille (par exemple : "Dessin assisté par Ordinateur"). Ensuite une combobox100 pour choisir le volume horaire associé (par exemple choix entre plusieurs type (type 1 =10 h, type 2 = 20h etc...)

Puis deux ou trois autres combobox pour évaluer la difficulté, la maturité etc...

puis si on veut, on rajoute une ligne pour d'autres taches. (architecture identique à la précédente.)

et puis si on a une autre phase on rajoute un panel (identique au précédent) pour la deuxième phase)

L'architecture est la même que pour la phase précédente.

Etc... pour autant de phase que l'on souhaite faire.

Merci beaucoup en tout cas pour ton aide.

a+

Neolive
0
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
1 sept. 2010 à 10:34
Salut

Merci beaucoup pour ton code, je vais m'en inspirer largement pour mon petit programme.

Si j'ai d'autres question puis-je te recontacter ?

Merci encore

Neolive
0
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
1 sept. 2010 à 19:02
ShayW

Dis moi. Petite question encore.

Comment puis je arriver à combiner les deux codes que tu m'as transmis.

J'aimerais pourvoir créer des lignes dans les panels. Panels que je peux aussi dupliquer.

Merci de ton aide.

Neolive
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
1 sept. 2010 à 20:29
Bonsoir

Je ne sais pas trop.Pourquoi veux tu combiner?
le 2 eme code est l'améloration du 1 code
J'aimerais pourvoir créer des lignes dans les panels
que veux dire lignes?
le mieux serait que tu envoies le plan de ton
programme c'est un projet pour le travail ?
0
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
1 sept. 2010 à 23:09
ShayW

En fait je cherche à créer, par un bouton ajout, dans le panel, d'autres lignes avec les combobox0, combobox100 et listbox (par exemple dans ton cas). une ligne pour moi étant les premières combobox. Cette ligne je cherche à la créer dans le même panel mais en dessous de la précédente.

Ensuite, avec le bouton ajout_panel, je crée des panels qui reprenne la même logique de création de ligne mais pour des panels.

Ainsi, le plan de ma form est le suivant.

Imagine que l'utilisateur doit faire un devis sur une voiture.

Il y a une partie mécanique, une partie thermique et une autre fluidique (par exemple).

Ces parties correspondent en fait à chaque panel de créer.

Par contre tous ces domaines se découpent en plusieurs sous tache.

Exemple :
mécanique est composé de conception, calcul, fabrication (par exemple)
thermique de radiatif, convectif etc...
fluidique pareil de quelques sous taches.

Chaque sous tache correspond en fait à une ligne (composé des combobox0(i)) avec i pouvant aller de 1 à l'infini.

Ainsi tu te retrouves avec le plan suivant :

- mécanique (panel 1 créer par un click sur un bouton création de tache par exemple)
- conception (ligne 1)
- calculs (ligne 2 créer par un click sur un bouton pour ajouter une ligne)
- fabrication (ligne 3 créer par un deuxième click sur un bouton pour ajouter une ligne)
- etc ... pour autant de sous tache créer par autant de click.
-Thermique (panel 2 créer par un deuxième click sur un bouton création de tache par exemple))
- radiatif (ligne 1)
- convectif (ligne 2 créer par un click sur un bouton pour ajouter une ligne)
- etc ... pour autant de sous tache créer par autant de click.
- fluidique (panel 3 créer par un troisième click sur un bouton création de tache par exemple)
- étude écoulement (ligne 1)
- etc ... pour autant de sous tache créer par autant de click.
- etc pour autant de taches (créer par des click sur un bouton création de tache)

Est ce que ca te semble plus clair.

Et effectivement c'est pour du boulot mais vu que ce n'est pas mon domaine et que je suis novice, je me galère un peu...

Merci encore de ton aide.

Neolive
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 sept. 2010 à 09:46
Bonjour

Si je comprend tu n'as seulement que 3 panels ?
mécanique,thermique et fluide
dans la panel mécanique tu as
un bouton pour créer les sous taches
combobox pour conception
combobox pour calcul
combobox pour fabrication
le meme procèdé pour les autres panels
en fin de compte dans chaque panel tu n'as qu'un
bouton et des comboboxes creés at runtime et placés en dessous de l'autre où y a t'il d'autres
components ?
par ex le combo conception de la panel mécanique
comprend plusieurs items
si je crée un autre panel mécanique son combo
conception a le meme contenu que le précedent ?
Si non comment vas tu savoir quel items il faut
ajouter au combo ?
0
neolive31 Messages postés 20 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 11 avril 2011
2 sept. 2010 à 11:13
Salut

En fait sur ma form je dois avoir un bouton qui me génère des panels (autant que je veux), panel sur lesquel se trouve ta ligne de combobox (ici, dans ton code combobox0(0), combobox100(0) et ta listbox listtype(0)).
Sur ces panels il me faudrait un bouton de création de ligne (duplication de la ligne composé par les combobox0(1), combobox100(1) et listbox listtype(1)), en dessous de la précédente, sur le même panel, et ce pour chaque panel de créer.

en fait si tu raisonnes en matrice, il faudrait que par exemple :
pour counterpanel 0 et ("countercombo" & counterpanel) 0

panel0 soit composé de combobox0(0,0), combobox100(0,0) et listtype(0,0).
Quand j'appuie sur la création de ligne sur le panel 0 je crée en dessous de la précedente (countercombo0 = 1) une ligne composée de combobox0(0,1), combobox100(0,1) et listtype(0,1) et ainsi de suite chaque fois que je crée des lignes sur le panel 0. (countercombo0 pouvant aller à l'infini)

Ensuite si je clique sur création panel, je crée un panel 1 placé au dessous du premier (counterpanel 1 et countercombo1 pour le panel 1 0) avec une première ligne composée des combobox0(1,0), combobox100(1,0) et listtype(1,0).
si je clique sur la création de ligne (countercombo1 pour le panel 1 = 1), comme pour le précédent j'obtiens une ligne dessous composé de combobox0(1,1), combobox100(1,1) et listtype(1,1).

Avec bien entendu counterpanel pouvant aller à l'infini.

Les items de la combobox0 sont toujours identique.
les items de la combobox100 sont toujours dépendants du choix fait dans la combobox0 comme dans ton code précédent.

Est ce un peu plus clair?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 sept. 2010 à 00:37
Salut
enfin
 Public Class Form1

    Private counterpanel As Integer
    Private panels() As System.Windows.Forms.Panel
    Private measure As System.Windows.Forms.Label
    Private listtype() As System.Windows.Forms.ListBox
    ' Private scrollbarvert() As System.Windows.Forms.VScrollBar
    Private countercombo() As Integer
    'declare 2 vecteur dynamique de combobox la taille(size) du vecteur n'est pas fixé
    Private buttoncombo() As System.Windows.Forms.Button
    Private labelpanel() As System.Windows.Forms.Label
    Private combobox0() As System.Windows.Forms.ComboBox
    Private combobox100() As System.Windows.Forms.ComboBox
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.AutoScroll = False
        counterpanel = 0
        measure = New Label
        measure.Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
        measure.TextAlign = ContentAlignment.MiddleCenter
        Me.WindowState = FormWindowState.Maximized
        Me.AutoScrollMinSize = New Point(6000, 6000)
    End Sub

    
    Private Sub buttoncombo_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim item As String
        Dim index As Integer
        index = countercombo(sender.tag)
        'ajouter le combo à son vecteur le reserved word "preserve" indique qu'on aggrandit le vecteur
        'sans  effacer l'ancien 
        ReDim Preserve combobox0(index)
        ReDim Preserve combobox100(index)
        ReDim Preserve listtype(index)
        'ReDim Preserve scrollbarvert(index)
        combobox0(index) = New ComboBox
        combobox100(index) = New ComboBox
        listtype(index) = New ListBox
        panels(sender.tag).Controls.Add(combobox0(index))
        panels(sender.tag).Controls.Add(combobox100(index))
        panels(sender.tag).Controls.Add(listtype(index))

        
        With combobox0(index)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            .Items.Add("titi")
            .Items.Add("tata")
            .Items.Add("toto")
            .BackColor = Color.Azure
            .BackColor = Color.Azure
            .Anchor = AnchorStyles.None
            If index > 0 Then
                .Location = New Point(2, listtype(index - 1).Bottom + 10)
            Else
                .Location = New Point(2, Me.buttoncombo(sender.tag).Bottom + 2)
            End If
            measure.Text = "tata"
            .Width = measure.PreferredWidth * 2
            .Tag = index
            .Visible = True
            AddHandler .SelectedIndexChanged, AddressOf combobox0_SelectedIndexChanged
        End With
        With combobox100(index)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            For Each item In combobox0(index).Items
                .Items.Add("type" & (item))
            Next
            .Anchor = AnchorStyles.None

            .Location = New Point(combobox0(index).Right + 10, combobox0(index).Top)
            measure.Text = "typetata"
            .Width = measure.PreferredWidth * 2
            .Tag = index
            .Visible = True
        End With
        With listtype(index)
            .Anchor = AnchorStyles.None

            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            .Location = New Point(combobox100(index).Right + 10, combobox100(index).Top)
            .BorderStyle = BorderStyle.Fixed3D
            .Visible = True
        End With
        countercombo(sender.tag) = countercombo(sender.tag) + 1
    End Sub
    Private Sub ajoutes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ajoutes.Click
       

        'ajouter un panel et un bouton à son vecteur le reserved word "preserve" indique qu'on aggrandit le vecteur
        'sans  effacer l'ancien 
        ReDim Preserve buttoncombo(counterpanel)
        ReDim Preserve panels(counterpanel)
        ReDim Preserve labelpanel(counterpanel)
        labelpanel(counterpanel) = New Label
        panels(counterpanel) = New Panel
        Me.Controls.Add(panels(counterpanel))
        buttoncombo(counterpanel) = New Button
        panels(counterpanel).Controls.Add(buttoncombo(counterpanel))
        panels(counterpanel).Controls.Add(labelpanel(counterpanel))
        With panels(counterpanel)
            .Anchor = AnchorStyles.None
            .AutoScroll = False
            .AutoScrollMinSize = New Size(4000, 4000)
            .BorderStyle = BorderStyle.Fixed3D
            If counterpanel > 0 Then
                .Location = New Point(10, panels(counterpanel - 1).Bottom + 30)
            Else
                .Location = New Point(10, ajoutes.Bottom + 2)
            End If
            measure.Text "tata" & "  " & "typetata" & "  " & "  " & "type 2"
            .Width = (measure.PreferredWidth) * 3
            .Height = 200
            .BackColor = Color.LemonChiffon
            .Visible = True
        End With
        With labelpanel(counterpanel)
            .Anchor = AnchorStyles.None
            .Visible = True
            .AutoSize = True
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
            .TextAlign = ContentAlignment.TopLeft
            .ForeColor = Color.Black
            Select Case counterpanel Mod 3
                Case 0
                    .Text = "Mechanique"
                Case 1
                    .Text = "Thermique"
                Case 2
                    .Text = "Fluidique"
            End Select

            .Location = New Point(2, 2)

        End With

        With buttoncombo(counterpanel)
            .Font = New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)

            buttoncombo(counterpanel).Text = "ajouter un combo"
            buttoncombo(counterpanel).Anchor = AnchorStyles.Left
            buttoncombo(counterpanel).Anchor = AnchorStyles.Top
            buttoncombo(counterpanel).TextAlign = ContentAlignment.TopLeft
            buttoncombo(counterpanel).AutoSize = True
            buttoncombo(counterpanel).Location = New Point(2, labelpanel(counterpanel).Bottom + 6)
            buttoncombo(counterpanel).Tag = counterpanel
            buttoncombo(counterpanel).Visible = True
            AddHandler .Click, AddressOf buttoncombo_click
        End With
        
        ReDim Preserve countercombo(counterpanel)
        counterpanel = counterpanel + 1
        Me.Refresh()
    End Sub
    Private Sub combobox0_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim iter As Byte
        combobox100(sender.tag).Text = "type" & combobox0(sender.tag).Text
        combobox100(sender.tag).Visible = True
        listtype(sender.tag).Items.Clear()
        Select Case combobox0(sender.tag).SelectedItem
            Case "toto"
                listtype(sender.tag).Items.Add(combobox100(sender.tag).SelectedItem)
                For iter = 1 To 3
                    listtype(sender.tag).Items.Add("type" & " " & iter)
                Next
            Case "tata"
                listtype(sender.tag).Items.Add(combobox100(sender.tag).SelectedItem)
                For iter = 4 To 6
                    listtype(sender.tag).Items.Add("type" & " " & iter)
                Next
            Case "titi"
                listtype(sender.tag).Items.Add(combobox100(sender.tag).SelectedItem)
                For iter = 7 To 9
                    listtype(sender.tag).Items.Add("type" & " " & iter)
                Next
        End Select
        measure.Text = "type 8"
        listtype(sender.tag).Width = measure.PreferredWidth * 2
        listtype(sender.tag).Visible = True
    End Sub

End Class
0
Rejoignez-nous