Créer des ToolStripMenuItem.DropDownItems dynamiquement [Résolu]

Signaler
Messages postés
22
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
4 janvier 2008
-
 gaffa -
Bonjour.

J'ai une boucle qui permet de créer des DropDwnItems dynamiquement grâce à une boucle.
Cependant je cherche à obtenir un événement différent pour chacun des DropDownItems, et je n'y arrive pas, sans doute parce que j'appelle une foction qui est extérieure à ma boucle et à la fonction contenant cette boucle.

J'ai mis un petit bout de code histoire de me faire comprendre.

int i;

private void myFunction()
{
  ...
  for
(i = 0; i < myArray.Count; i++)
  {
    ToolStripMenuItem Item = newToolStripMenuItem(myArray[i].ToString(), Image.FromFile("image.gif"), newEventHandler(AjouterItem_Click));
    myToolStripMenuItem.DropDownItems.Add(Item);
  }
}void AjouterItem_Click(object sender, EventArgs e)
{
  MessageBox.Show(i.ToString());
}

Comment faire pour que ma boucle for me crée un DropDownItem avec à chaque fois un événement différent pour chaque valeur de i ?

Merci d'avance.

5 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
beurk le tableau de EventHandler...

la solution la plus propre à mon sens c'est de repartir de ton idée de départ et d'y ajouter 2 ou 3 trucs :
private void myFunction()
{
  ...
  for (i = 0; i < myArray.Count; i++)
  {
    ToolStripMenuItem Item = newToolStripMenuItem(myArray[i].ToString(), Image.FromFile("image.gif"), newEventHandler(AjouterItem_Click));
   Item.Tag = i;
    myToolStripMenuItem.DropDownItems.Add(Item);
  }
}
void AjouterItem_Click(object sender, EventArgs e)
{
   ToolStripMenuItem item = sender as ToolStripMenuItem;
   if (item == null) {
      return;
   }
   MessageBox.Show(item.ToString());
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
7
Salut,

Tu disposes d'un tableau (myArray) pour le texte des items.  Si tu fais pareil pour les événements (en faisant un tableau de EventHandler), tu devrais arriver à faire ce que tu souhaites.
Messages postés
22
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
4 janvier 2008

A la fin de l'exécution de myFunction(), tous les DropDownItems ont été créés correctement, mais ils renvoient tous sur la même chose.
La valeur de i n'a pas été prise en compte, tous les DropDownItems renvoient sur la dernière valeur de i.
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
7
EventHandler[] myHandlers = new EventHandlers[myArray.Length];





myHandlers[0] =



new
EventHandler(AjouterItem_Click);



myHandlers[1] =



new
EventHandler(SupprimerItem_Click);



myHandlers[2] =



new
EventHandler(CopierItem_Click);



myHandlers[3] =



new
EventHandler(RenommerItem_Click);
// ...







  for (i = 0; i < myArray.Count; i++)
  {
    ToolStripMenuItem Item = newToolStripMenuItem(myArray[i].ToString(), Image.FromFile("image.gif"), myHandlers[i]);
    myToolStripMenuItem.DropDownItems.Add(Item);
  }

Est-ce plus clair ou suis-je à côté de la plaque ?
sebmafate

Merciiiiiiiiiiiiiiiiiiiiiiiii