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

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

Votre réponse

5 réponses

Meilleure réponse
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscriptionModérateurStatut 14 février 2014 Dernière intervention - 23 oct. 2007 à 09:26
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]

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de sebmafate
cs_niky 168 Messages postés jeudi 28 juin 2001Date d'inscription 18 octobre 2008 Dernière intervention - 22 oct. 2007 à 20:25
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
DaFridge 22 Messages postés lundi 25 juin 2007Date d'inscription 4 janvier 2008 Dernière intervention - 22 oct. 2007 à 21:36
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
cs_niky 168 Messages postés jeudi 28 juin 2001Date d'inscription 18 octobre 2008 Dernière intervention - 22 oct. 2007 à 23:13
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

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.