Liste de comboBox [Résolu]

Signaler
Messages postés
22
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
1 août 2005
-
Messages postés
22
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
1 août 2005
-
bonjour,

Voilà j'ai une liste de comboBox que j'aimerai remplir en boucle ainsi :

for (i=0;i<20;i++)
{
string nomCombo = "comboBox" + i;
while (Form1.Catalog[j]!=null)
{
nomCombo.Items.Add(Form1.Catalog[j]);
j++;
}
}

Evidemment "nomCombo.Items.Add(Form1.Catalog[j]);" ça ne fonctionne pas.
Connaissez-vous un moyen de transformer un string en nom de control ?

Merci

Redam

14 réponses

Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
Tu dois indiquer que tes bouton appartiennent à ta form

Rajoute

this.Controls.AddRange(comboBoxs);

aprés ta boucle de création

Théo
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
bien sur tu peux acceder à n'importe quelle propriete MaProprieté en faisant



comboBoxs[i].MaProprieté



ou créer un evt MonEvt

comboBoxs[i].MonEvt += new System.EventHandler(MaFonctionDelegate);

Théo
Messages postés
22
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
1 août 2005

Merci. J'ai résolu mon problème autrement. Je n'arrivais pas à atteindre mes comboBox depuis une fonction de la classe parceque la déclaration :
private ComboBox [] comboBoxs;
était dans le constructeur.
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
je ne connais pas de methode qui te permette de faire ca sans connaitre le type de ton objet a l'avance, a moins qu'ils est une interface que tu puisse exploiter, mais par contre si tu connais le type de ton objet, tu peux par exemple faire ca :

string name =
"lstTest";

ListBox lb = (
ListBox)
this.Controls[name];
lb.Items.Add(
"test");
lb.Items.Add(
"truc");

dans ma feuille j'ai un objet de type ListBox qui s'appel lstTest et je peux le controller de cette maniere
tu peux aussi acceder a tes controles via un index, mais par contre c'est "tous" les controles que tu choppe, ceci dit tu peux filtrer sur le type de l'instance et donc faire ceci si tu veux controller tous tes ListBox :



foreach (
Control ctrl
in
this.Controls)
{

if (ctrl
is
ListBox)
{
// traitement

MessageBox.Show(ctrl.Name);
}
}

J'espere que ca peut t'aider
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
Le plus simple est de stocker tes comboBox dans un tableau

ComboBox[] comboBoxs=new comboBox[]{cb1,cb2,cb3,...};

...

et puis

foreach (ComboBox combo in comboBoxs) {

combo.Add(..);

}
...
Théo
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
ou

for (i=0;i<20;i++)

{

comboBoxs[i].Add(..)

}


Désolé, j'ai fait l'exemple pour des combobox et non des listbox (il faut que je lise mieux les questions..)
Théo
Messages postés
22
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
1 août 2005

Je vais essayer ça, merci. Tu avais bien lu, on parle bien de comboBox..
Messages postés
22
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
1 août 2005

Tu dis :
Le plus simple est de stocker tes comboBox dans un tableau
ComboBox[] comboBoxs=new comboBox[]{cb1,cb2,cb3,...};

Mais il faut bien déclarer avant cb1,cb2,... ?
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
Si tu les déclare dynamiquement dans ton code

tu fais par exp

int iNb=3;

ComboBox[] comboBoxs=new comboBoxs[iNb]

for (int i=0;i<iNb;i++)

{

comboBoxs[i]=new ComboBox();

//defini toutes les propritée de tes comboboxs

cb.Location=...

...

}

Théo
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
Si tu les déclare dynamiquement dans ton code

tu fais par exp

int iNb=3;

ComboBox[] comboBoxs=new comboBoxs[iNb]

for (int i=0;i<iNb;i++)

{

comboBoxs[i]=new ComboBox();

//defini toutes les propritée de tes comboboxs

comboBoxs[i].Location=... //Petite erreur

...

}

Théo
Messages postés
22
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
1 août 2005

Tout compile bien ainsi mais rien ne s'affiche dans la fenêtre... Vois-tu quelquechose qui pourrait manquer ? Voici mon code :

"
int Nbcombo=i;
ComboBox[] comboBoxs=new ComboBox[Nbcombo];
for (int c=0;c<Nbcombo;c++)
{
MessageBox.Show("création de la combo "+c.ToString());
comboBoxs[c]=new ComboBox();
comboBoxs[c].Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
comboBoxs[c].Location = new System.Drawing.Point(520, (c*20)+5);
comboBoxs[c].MaxDropDownItems = 100;
comboBoxs[c].Name = "comboBox"+c;
comboBoxs[c].Size = new System.Drawing.Size(504, 23);
comboBoxs[c].TabIndex = c+2;
}

foreach (ComboBox combo in comboBoxs)
{
int j = 0;
while (Form1.Catalog[j]!=null)
{
combo.Items.Add(Form1.Catalog[j]);
j++;
}
}
"

Merci
Messages postés
22
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
1 août 2005

Je venais juste de trouver en mettant :
this.Controls.Add(combo);
dans la boucle foreach.

Merci 1000*
a+
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
Avec Plaisir

Théo
Messages postés
22
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
1 août 2005

Autre problème !! Est-il possible de gérer des événements sur ces controls dynamiques ??
Ou même est-il possible ne serait-ce que d'accéder aux valeurs de ces comboBox dans une autre méthode de cette même classe ?

Damien