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
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.
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
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
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
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.
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
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.
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
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.
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 ?
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.
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 ?
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...
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 ?
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.
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