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 :

Nom de Combobox variable [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Nom de Combobox variable
    Bonjour,

    Après quelques recherches sur google je n'ai toujours pas trouvé réponse pour répondre à mon objectif.

    Contexte :

    J'ai une table avec toutes mes données pour mes combobox

    j'ai un champs catégorie (exemple couleur ) et un champs valeur (exemple rouge, vert ...)
    exemple 2 catégorie (taille) , valeurs (petit, moyen , grand )

    en ouverture de fenêtre (load), je remplie mes combobox, mais j'en ai pas mal !

    Tout est sur le même principe, je fait une requête SELECT donnée FROM matable WHERE categorie='couleur', puis je met le résultat de ma requête dans mon combobox.

    la seule chose qui change, c'est le nom de ma combobox et la catégorie

    plutôt que d'avoir X fois le meme code avec 2 truc qui change pourquoi ne pas faire une fonction avec 2 paramètres
    le paramètre catégorie, c'est facile.

    Ce que je cherche a faire :

    si mon combobox s'appel : CBB_couleur
    pour ajouter une valeur : CBB_couleur.Items.Add("rouge")

    maintenant comment puis-je faire pour que le nom de ma combo soit variable dans une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub mafonction_maj_combo (ByVal comboname As String, ByVal categorie As String)
     
    '(..mon code SQL...)
     
    ' ceci ne fonctionne pas :
     
    comboname.Items.Add("rouge")
     
    end sub
    quel est l'astuce ?

    par avance merci

    Christophe

  2. #2
    Membre actif
    Homme Profil pro
    Expertise sécurité
    Inscrit en
    Avril 2013
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expertise sécurité

    Informations forums :
    Inscription : Avril 2013
    Messages : 185
    Points : 268
    Points
    268
    Par défaut
    Hello,

    Pour m'être battu avec des combobox sur Word, je pense que tu peux peut-être essayer de parcourir l'ensemble de tes combobox avec leur type plutôt qu'avec leur nom.
    Je n'ai pas la réponse exact à ton problème, mais je m'y prendrais à peu près comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Si c'est une combobox
       Call mafonction_maj_combo(monObjetCombobox)
    Sinon 
       Do other things
    Alors... Un petit exemple où l'on parcours des combobox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each oCtl In ThisDocument.InlineShapes
                If TypeName(oCtl.OLEFormat.Object) = "ComboBox" Then
                        Call Combobox_Initialize(oCtl.OLEFormat.Object)
                End If
    Next oCtl
    Ici c'est tout bête, je parcours tout les éléments de types InlineShapes à la première ligne.
    A la seconde ligne je vérifie que ce sont des combobox (ce nom là ne bouge pas, c'est le type et pas le nom d'ailleurs...).
    Ensuite je fais mon traitement via la fonction qui prend une combobox en paramètre.
    Et le tour est joué.

    La fonction Combobox_Initialize :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Combobox_Initialize(ByRef combo As combobox)
      combo.List() = Array("Option1", "Option2")
      combo.Value = ""
    End Sub
    En espérant t'avoir aidé,

    @+

    JayGr

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Il suffit de passer en paramètre la combobox et donc de définir ce paramètre de type ComboBox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub mafonction_maj_combo (ByVal comboname As ComboBox, ByVal categorie As String)
     
        '(..mon code SQL...)
     
        comboname.Items.Add("rouge")
     
    end sub
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Bonjour,

    Il suffit de passer en paramètre la combobox et donc de définir ce paramètre de type ComboBox.
    mon appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        alimante_combo("CB_unit_catego", "toto")
    Ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       Sub alimante_combo(ByVal comboname As ComboBox, ByVal categorie As String)
     
            '(..mon code SQL...)
     
            comboname.Items.Add(categorie)
     
        End Sub
    Si sur le principe ca semble bien, VB retourne une erreur :

    Impossible de convertir une valeur de type 'String' en 'System.Windows.Forms.ComboBox'.
    J'ai cette erreur sur le "CB_unit_catego" de l'appel de la fonction

    il me propose de résoudre le problème en ajoutant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub alimante_combo(p1 As String, p2 As String)
            Throw New NotImplementedException
        End Sub
    Mais ca marche pas plus !

    une idée de la cause ?

  5. #5
    Membre actif
    Homme Profil pro
    Expertise sécurité
    Inscrit en
    Avril 2013
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expertise sécurité

    Informations forums :
    Inscription : Avril 2013
    Messages : 185
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par noscollections Voir le message
    mon appel
    Si sur le principe ca semble bien, VB retourne une erreur :

    J'ai cette erreur sur le "CB_unit_catego" de l'appel de la fonction

    il me propose de résoudre le problème en ajoutant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub alimante_combo(p1 As String, p2 As String)
            Throw New NotImplementedException
        End Sub
    Mais ca marche pas plus !

    une idée de la cause ?
    Tout est là... Tu lui dit que tu vas passer un type combobox tu lui envoies un String... Ou tu lui passes un type combobox ou tu lui passes un String...
    Là tu lui passes le nom, pas la combo.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Il suffit de passer en paramètre la combobox
    appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        alimante_combo(CB_unit_catego, "toto")
    Ou CB_unit_catego est le nom donné à ton contrôle combobox.

    Autre exemple
    Citation Envoyé par noscollections Voir le message
    Ce que je cherche a faire :
    si mon combobox s'appel : CBB_couleur
    pour ajouter une valeur : CBB_couleur.Items.Add("rouge")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        alimante_combo(CBB_couleur, "toto")
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  7. #7
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Ca a l'air pourtant simple,comme dit par les intervenants....
    Supposons pour plus de complication que ,comme toujours,tu as deja droppes tes combo et nommes à ta convenance....et qu'ils sont tellement nombreux que toi-meme l'auteur tu t 'y perdrais facilement....

    Tu peux utiliser leurs noms pour les retrouver dans ta fonction de maj simplement:
    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
    19
    20
    21
    22
    23
    24
    25
     
    Public Class Form1
        'ce form fourmille de controls 
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim cbo As ComboBox
            cbo = New ComboBox
            cbo.Name = "CBB_Couleur"
            cbo.Tag = cbo.Name
     
            Maj_Combo(cbo, "couleur")
        End Sub
     
        Sub Maj_Combo(ByVal cbo As ComboBox, ByVal categorie As String)
            Dim arr() As Control = Me.Controls.Find(cbo.Name, True)
            For Each item As Control In arr
                If TypeOf (item) Is ComboBox And item.Name = cbo.Name Then
                    cbo.Items.Add(categorie)
                    Exit For
                End If
            Next
        End Sub
     
     
     
    End Class

  8. #8
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonjour,
    Question bête, pourquoi ne pas passer par deux BindingSource?
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Combobox
    Bonjour,

    Après plusieurs heures de combats avec VB, de recherche sur google, j'ai réussi a faire ce que je veux , je vais donc mettre "résolu"

    je clique sur mon bouton, et j'appel ma fonction avec 2 paramètres, mon name de combobox et mon paramètre qui servira à ma requête SQL.
    j'affiche dans mon combobox mon paramètre de requête pour savoir si tout a suivi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
     
            Maj_Combo(CBB_Couleur, "couleur")
     
        End Sub
     
      Sub Maj_Combo(ByVal cbo As ComboBox, ByVal categorie As String)
            '..SQL code dans le futur
            cbo.Items.Add(categorie)
     
        End Sub


    le code de MABROUKI me semblait super mais j'ai pas réussi à le mettre en œuvre. Même en le simplifiant, je n'ai pas réussi à faire rien qu'un truc super simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
     
            Dim cbo As ComboBox
            cbo = New ComboBox
            cbo.Name = "CBB_Couleur"
            cbo.Tag = cbo.Name
            cbo.Items.Add("TOTO")
     
        End Sub
    Merci à tous pour vos conseils.

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

Discussions similaires

  1. Module dont le nom est une variable
    Par Mr Hyde dans le forum Général Python
    Réponses: 11
    Dernier message: 26/02/2023, 20h39
  2. Nom de table variable ?
    Par szdavid dans le forum Oracle
    Réponses: 2
    Dernier message: 10/08/2005, 10h56
  3. [Reflection] Connaître le nom d'une variable ...
    Par dahwoud dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 09/08/2005, 14h37
  4. [try except keyerror] récupérer le nom de la variable
    Par jean-jacques varvenne dans le forum Général Python
    Réponses: 2
    Dernier message: 03/03/2005, 16h59
  5. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02

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