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

el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 31 août 2005 à 15:04 - Dernière réponse : sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention
- 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
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 31 août 2005 à 15:34
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

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de sebmafate
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 31 août 2005 à 15:40
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
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 31 août 2005 à 15:53
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
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 31 août 2005 à 15:54
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.