IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Creer dynamiquement des combobox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 315
    Par défaut Creer dynamiquement des combobox
    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

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est parce que tu déclares le handler de l'évènement de façon statique (avec l'instruction Handles). A chaque fois que tu crées un contrôle, tu remplace le précédent dans la variable correspondante (CbColumns, CbOperators, CbValues). Donc les handlers gèrent les évènements pour les contrôles pointés par ces variables, c'est à dire les derniers créés.
    Il faut affecter dynamiquement les handlers d'évènements aux contrôles que tu crées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler unCombo.SelectedIndexChanged, AddressOf(CbValues_SelectedIndexChanged)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/02/2009, 13h23
  2. [Débutant] Creer dynamiquement des objets
    Par Uragiru dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 29/04/2008, 19h46
  3. [Excel] Gérer des combobox dynamiques
    Par VBall dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/09/2006, 14h23
  4. [RCP]Creer dynamiquement des perspectives
    Par remax_ren dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 26/05/2006, 16h09
  5. [VBA-E] Est il possible de creer dynamiquement des controles en VBA
    Par bbkenny dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/08/2004, 20h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo