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

Messages postés
22
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
4 janvier 2008
- - Dernière réponse :  gaffa - 28 oct. 2012 à 06:55
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.
Afficher la suite 
A voir également:

5 réponses

Meilleure réponse
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
3
Merci
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]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sebmafate
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
6
0
Merci
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.
Commenter la réponse de cs_niky
Messages postés
22
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
4 janvier 2008
0
Merci
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.
Commenter la réponse de DaFridge
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
6
0
Merci
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 ?
Commenter la réponse de cs_niky
0
Merci
sebmafate

Merciiiiiiiiiiiiiiiiiiiiiiiii
Commenter la réponse de gaffa