Modifier plusieurs comboBox en une boucle

Messages postés
11
Date d'inscription
vendredi 11 septembre 2015
Dernière intervention
7 octobre 2015
-
Bonjour à tous !

Voilà, il y a fort longtemps, j'ai su faire une chose magique.. Que je n'arrive plus à faire ! Je vous explique :

J'ai 5 comboBox nommées ainsi :
comboBoxRace1, comboBoxRace2, comboBoxRace3, comboBoxRace4, comboBoxRace5.

Je souhaiterai modifier tout mes items de mes comboBoxRace en une boucle tel que :
string combobox;
            ComboBox combo = new ComboBox();
            for (int i = 1; i < 6; i++)
            {
                combobox = "comboBoxRaces" + i.ToString();
                combo = (ComboBox)(combobox);
                combo.Items.Add("monItem");
            }


Le soucis, vous vous en doutez sûrement, est de caster ma chaine en comboBox..
J'ai testé aussi ceci :
string combobox;
            ComboBox combo = new ComboBox();
            for (int i = 1; i < 6; i++)
            {
                combobox = "comboBoxRace" + i.ToString();
                combo.Name = combobox;
                combo.Items.Add("monItem");
            }

Mais bien sûr, il ne fait que récupérer le nom, et non pas mon comboBox.

Quelqu'un aurait une idée, une solution ? Merci !

EDIT : Ajout du LANGAGE dans les balises de code.
Explications disponibles ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

Votre réponse

3 réponses

Messages postés
12406
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
0
Merci
Bonsoir, je ne comprends ni ce que tu expliques, ni le code.

Peux-tu décrire clairement ce que tu veux faire?
Commenter la réponse de Whismeril
Messages postés
11
Date d'inscription
vendredi 11 septembre 2015
Dernière intervention
7 octobre 2015
0
Merci
Je vais essayer d'être le plus clair possible.

J'ai 5 comboBox. Les noms de ces 5 comboBox sont identiques, je rajoute juste une incrémentation derrière (comboBox1, comboBox2...).

Je souhaite instancier les items de ces comboBox dans une boucle. Comment puis-je faire cela (en jouant avec le nom des comboBox) ?
Whismeril
Messages postés
12406
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
-
Ok mais tes items viennent d'ou?
Par ce que dans ton code tu remplis tes combo avec le texte "Mon Item".

A part avoir 5 listes remplies de "Mon Items" ça ne sert à rien.

Donc afin de te répondre correctement et en .Net (ce que tu as écrit c'est du VB6 traduit mot à mot et donc ça ne marche pas...), il me faut plus de détails.

Il y a quand même de grandes chances ce que tu souhaites afficher (note que je n'ai pas écrit le texte à entrer, car c'est différent) n'est pas toujours pareil, et il est aussi facile de supposer que tu vas voulloir lier une action quelquonque à la selection d'un item dans l'un des combo....
Waylander59
Messages postés
11
Date d'inscription
vendredi 11 septembre 2015
Dernière intervention
7 octobre 2015
> Whismeril
Messages postés
12406
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
-
Mes items viennent d'un tableau de chaines (string[]) que je récupère d'une table (BdD locale). Je veux instancier mes 5 comboBox avec ce tableau de chaines.
J'avais écrit "monItem" juste pour l'exemple.

Voilà actuellement ce que je fais :
                Race race = new Race();
races = race.ListerRaces(); // races est un string[]

for (int i = 0; i < races.Length; i++)
{
comboBoxRaces1.Items.Add(races[i]);
comboBoxRaces2.Items.Add(races[i]);
comboBoxRaces3.Items.Add(races[i]);
comboBoxRaces4.Items.Add(races[i]);
comboBoxRaces5.Items.Add(races[i]);
}


Bien sûr, les items sont amenés à être modifiés/supprimés. Par exemple, lorsque je clique sur le bouton "1", il va supprimer un item de mon comboBoxRaces1. Si je clique sur le bouton "2", il va supprimer un item de mon comboBoxRaces2 etc..
Commenter la réponse de Waylander59
Messages postés
12406
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
0
Merci
Bonsoir, vite fait en fonction de ce que tu as dit

        Dictionary<ComboBox,List<string>> dico = new Dictionary<ComboBox,List<string>>();//pour associer source de données et combo
        
        private void Waylander()
        {
            string[] monTableau = { "Coucou", "Salut", "Bonjour", "Hello", "Konichiwa","Ola" };

            foreach (ComboBox combo in this.Controls.OfType<ComboBox>().Where(c => c.Name.StartsWith("combo")))
            {
                List<string> source = monTableau.ToList();//le cast en list créer une source différente par combo, de plus cette liste sera modifiable puisque tu veux supprimer tel ou tel item
                combo.DataSource = source;
                dico.Add(combo,source);

            }

        }


et dans le bouton
        private void button1_Click(object sender, EventArgs e)
        {
            
            //pour la suppression combo2 (index 1), item 3
            dico.ElementAt(1).Value.RemoveAt(3);//on supprime l'élémént 3 de la source 1
            ComboBox monCombo = dico.ElementAt(1).Key;
            monCombo.DataSource = null;
            monCombo.DataSource = dico.ElementAt(1).Value;

        }


le problème de binder de cette façon est que pour afficher les mise à jour de la liste il est nécessaire de supprimer la liaison et de la refaire (d'ou le dictionnaire).

Par contre, si tu te sers de databondingsources, il n'y a plus ce soucis. Voir ce tuto (par forcément adapté puisque tu n'utilises pas d'objets mais des string)
http://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.