Créer des ToolStripMenuItem.DropDownItems dynamiquement

Résolu
DaFridge Messages postés 22 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 4 janvier 2008 - 22 oct. 2007 à 19:19
 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.

5 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
23 oct. 2007 à 09:26
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]
3
cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
22 oct. 2007 à 20:25
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.
0
DaFridge Messages postés 22 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 4 janvier 2008
22 oct. 2007 à 21:36
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.
0
cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
22 oct. 2007 à 23:13
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebmafate

Merciiiiiiiiiiiiiiiiiiiiiiiii
0
Rejoignez-nous