Création dynamique de MenuItem dans un menu [Résolu]

Messages postés
498
Date d'inscription
mercredi 7 juillet 2004
Dernière intervention
13 juillet 2015
- - Dernière réponse : sebmafate
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
- 31 août 2005 à 15:54
Salut,



voilà, j'ai une arraylist qui est remplit de string au cours de mon
programme. Pour chaque string de cette arraylist, je voudrais rajouter
une case à mon menu déjà présent :



en gros :

Nom_du_menu

menu_choix1

menu_choix2 -> string1

string2


string3


string4



Ca, c'est pas le problème, j'y arrive comme ceci :

private void menu_Selection_Select(object sender, EventArgs e)

{

this.m_selection_materiel.MenuItems.Clear();

//Remplissage arrayList

...

ArrayList am = new ArrayList(); //am pour array_materiel

am.Sort();

foreach (string materiel in am)

{

this.m_selection_materiel.MenuItems.Add(materiel);

}

}



Mais ce que je voudrais, c'est créer un gestionnaire dévènement pour chaque nouvelle case créée dynamiquement.

Je pense que ca doit ressembler à ca :

this.m_selection_materiel.MenuItems.Add(materiel, materiel_on_click(materiel));

mais je ne vois pas comment faire exactement. Chaque case aura la même
action, sauf que la string passée en paramètre sera différente. Comment
je dois faire ?

Un EventHandler pour chaque nouvelle case ? ou un EventHandler unique, auquel je passe le string choisi ?



Merci d'avance...
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
3
Merci
tu peux créer une classe dérivant de MenuItem à laquelle tu ajoutes par exemple la propriété Tag.

ex :
public class MenuItemExtend : MenuItem {
private object tag;
public object Tag {
get {return tag;}
set {tag = value;}
}
}

maintenant pour ton menu, tu fais ceci :
private void menu_Selection_Select(object sender, EventArgs e)
{
this.m_selection_materiel.MenuItems.Clear();
//Remplissage arrayList
...
ArrayList am = new ArrayList(); //am pour array_materiel
am.Sort();
MenuItemExtend mnu;
foreach (string materiel in am)
{
mnu = new MenuItemExtend();
mnu.Text = materiel;
mnu.Tag = materiel;
mnu.Click += new EventHandler( mnu_Click );
this.m_selection_materiel.MenuItems.Add(mnu);
}
}

et :
protected void mnu_Click(object sender; EventArgs e) {
switch( (string)((MenuItemExtend)sender).Tag) {
case "bois" :
traitementMenuBois();
break;
...
}
}

Sébastien FERRAND

Dire « Merci » 3

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

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

Commenter la réponse de sebmafate
Messages postés
498
Date d'inscription
mercredi 7 juillet 2004
Dernière intervention
13 juillet 2015
0
Merci
A première vue, je pense que ca doit être ce que je voulais...



Je m'en vais tester ça, et je te tiens au courant... : )
Commenter la réponse de el_teedee
Messages postés
498
Date d'inscription
mercredi 7 juillet 2004
Dernière intervention
13 juillet 2015
0
Merci
C'est génial ! Exactement ce que je voulais...



Selon la case choisie dans le menu, je peux sélectionner les éléments
de ma listview qui correspondent au texte de la case choisie :



private void menu_Selection_Select(object sender, EventArgs e)

{

this.m_selection_materiel.MenuItems.Clear();

ArrayList am = new ArrayList(); //am pour array_materiel



MenuItemExtend mnu;



foreach (ListViewItem mon_item in list_Liste_Fichiers.Items)

{

if (!am.Contains(mon_item.SubItems[6].Text))

{


am.Add(mon_item.SubItems[6].Text);

}

}

am.Sort();

foreach (string materiel in am)

{

mnu = new MenuItemExtend();

mnu.Text = materiel;

mnu.Tag = materiel;

mnu.Click += new EventHandler( mnu_Click );

this.m_selection_materiel.MenuItems.Add(mnu);

}

}



protected void mnu_Click(object sender, EventArgs e)

{

selectionner_par_materiel((string)((MenuItemExtend)sender).Tag);

}



private void selectionner_par_materiel(string materiel)

{

foreach(ListViewItem mon_item in list_Liste_Fichiers.Items)

{

if (mon_item.SubItems[6].Text == materiel)

{

mon_item.Checked = true;

}

}

}



public class MenuItemExtend : MenuItem


{


private object tag;


public object Tag


{


get {return tag;}


set {tag = value;}


}


}


Merci boucou !!!
Commenter la réponse de el_teedee
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
0
Merci
de rien ;)

Sébastien FERRAND
Commenter la réponse de sebmafate

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.