Bonjour,
j'essaie de me creer des combobox dynamiquement dans un tableLayoutPanel.
En gros, je voudrais que mon utilisateur choisissent des filtres pour les appliquer a un dataset(ex: lastname = "intel"...).
Donc, lorsqu'il clique sur un bouton Add, ca ajoute une ligne avec trois combo box:un qui contient les colonnes de mon dataset, l'autre une liste d'operateurs(=,<,>...) , et le dernier les valeurs de la colonne selectionnee
Voici mon code:
En premier, je me suis cree une classe combobox qui declenche un evenement lorsque l'item est change:
Ensuite dans ma form, j'ai declare 3 combo box de cette maniere:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Public Class MyComboBox Inherits ComboBox Public Event SelectedItemChanged As EventHandler Protected Overrides Sub WndProc(ByRef m As Message) MyBase.WndProc(m) If (m.Msg = &H134) Then RaiseEvent SelectedItemChanged(Me, EventArgs.Empty) End If End Sub End Class
Finalement, lorsque l'utilsateur clique sur un bouton, une ligne avec trois combo box est creee dans mon tableLayoutPanel de cette facon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Friend WithEvents CbColumns As MyComboBox Friend WithEvents CbOperators As MyComboBox Friend WithEvents CbValues As MyComboBox
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplayViewer.Click 'add lstColumn CbColumns = New MyComboBox CbColumns.DataSource = GetLstColumns() tbFilters.Controls.Add(CbColumns) Dim columnName As String = CbColumns.SelectedValue.ToString() 'Add Operator CbOperators = New MyComboBox CbOperators.DataSource = lstOperator tbFilters.Controls.Add(CbOperators) 'Add ValueColumn CbValues = New MyComboBox CbValues.DataSource = GetValues(columnName) CbValues.DisplayMember = columnName tbFilters.Controls.Add(CbValues)
Lorsque l'utilisateur change de selection dans l'un des combobox, une action est declenchee:
Le probleme avec ce code, c'est que des que je rajoute une autre ligne de combobox dans ma table, seule les combobox de la derniere ligne declenchent une action. Les combox des lignes precedentes ne fonctionne plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Sub CbValues_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbValues.SelectedIndexChanged MsgBox("test") End Sub Private Sub CbOperators_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbOperators.SelectedIndexChanged MsgBox("test") End Sub Private Sub CbColumns_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbColumns.SelectedIndexChanged MsgBox("test") End Sub
Auriez-vous une idee de la facon de faire pour que chaque combobox de chaque ligne declenche une action?
sinon, auriez vous une meilleure idee pour ce que je veux faire?
j'espere que j'ai ete assez claire...
merci
Shirya
Partager