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:
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
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
Friend WithEvents CbColumns As MyComboBox
    Friend WithEvents CbOperators As MyComboBox
    Friend WithEvents CbValues As MyComboBox
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
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:
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
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.
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