collection[index]ou
collection[clé].
foreach(type machin in collection1) { if(machin.equals(bidule) { index = machin.index; truc = collection2[index]; break; } }
int index = 0; foreach(type machin in collection1) { if(machin.equals(bidule) { truc = collection2[index]; break; } index++; }
// Procédure commune aux sous-menus et boutons déroulants private void ModeAndDisplayChange(object sender, EventArgs e) { if (!(sender is ToolStripMenuItem)) // Même les "sous-boutons" sont des ToolStripMenuItem return; int index; string objname, parentname; if (((ToolStripMenuItem)sender).OwnerItem is ToolStripMenuItem) { ToolStripMenuItem subitems = new ToolStripMenuItem(); subitems = (ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem; index = subitems.DropDownItems.IndexOf((ToolStripMenuItem)sender); //UpdateDisplayMode(index); parentname = subitems.Name; objname = ((ToolStripMenuItem)sender).Name; // Just for debugging } else if (((ToolStripMenuItem)sender).OwnerItem is ToolStripDropDownButton) { ToolStripDropDownButton subitems = new ToolStripDropDownButton(); subitems = (ToolStripDropDownButton)((ToolStripMenuItem)sender).OwnerItem; index = subitems.DropDownItems.IndexOf((ToolStripMenuItem)sender); //UpdateOptionMode(index); parentname = subitems.Name; objname = ((ToolStripMenuItem)sender).Name; // Just for debugging } else return; switch (parentname) { case "mnuDisplayMode": case "tbrDisplayMode": UpdateDisplayMode(index); break; case "mnuOptionsMode": case "tbrOptionsMode": UpdateOptionMode(index); break; } Console.WriteLine("{0} = {1}[{2}]", objname, parentname, index); }
// Procédure d'évènement commune aux sous-menus et boutons déroulants private void ModeAndDisplayChange(object sender, EventArgs e) { System.Diagnostics.Debug.Assert(sender is ToolStripMenuItem); if (!(sender is ToolStripMenuItem)) // Même les "sous-boutons" sont des ToolStripMenuItem return; int index; string objname, parentname; if (((ToolStripMenuItem)sender).OwnerItem is ToolStripMenuItem) // Le parent est un menu { ToolStripMenuItem parent = new ToolStripMenuItem(); parent = (ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem; // Le menu appelant index = parent.DropDownItems.IndexOf((ToolStripMenuItem)sender); parentname = parent.Name; objname = ((ToolStripMenuItem)sender).Name; // Just for debugging } else if (((ToolStripMenuItem)sender).OwnerItem is ToolStripDropDownButton) // Le parent est un bouton { ToolStripDropDownButton subitems = new ToolStripDropDownButton(); subitems = (ToolStripDropDownButton)((ToolStripMenuItem)sender).OwnerItem; // Le bouton appelant index = subitems.DropDownItems.IndexOf((ToolStripMenuItem)sender); parentname = subitems.Name; objname = ((ToolStripMenuItem)sender).Name; // Just for debugging } else // Ne devrait pas arriver, mais une erreur d'affectation de handler est toujours possible return; // Dispatching des actions à entreprendre en fonction du nom de l'appelant et de l'index // !!! Seule partie à modifier en fonction de l'application !!! switch (parentname) { case "mnuDisplayMode": case "tbrDisplayMode": UpdateDisplayMode(index); break; case "mnuOptionsMode": case "tbrOptionsMode": UpdateOptionMode(index); break; } Console.WriteLine("{0} = {1}[{2}]", objname, parentname, index); }
private void UpdateDisplayMode(int index) { if (index >= mnuDisplayMode.DropDownItems.Count || index >= tbrDisplayMode.DropDownItems.Count) return; // Sécurité // Affectation de l'image du bouton cliqué au bouton déroulant // L'image active est ainsi visible quand le bouton est replié tbrDisplayMode.Image = tbrDisplayMode.DropDownItems[index].Image; // Gestion de la coche du menu cliqué correspondant foreach (ToolStripMenuItem mnu in mnuDisplayMode.DropDownItems) mnu.Checked = mnu.Equals(mnuDisplayMode.DropDownItems[index]); // Mémorisation dans un fichier .ini ProfileString.SetIniParam("Options", "Display", index); }
ToolStripMenuItem subitems = new ToolStripMenuItem(); subitems = (ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem;
trucmuche = new Toto(), il se crée dans la RAM, une instance toute neuve de Toto, et la référence de cette instance est donnée à la variable.
trucmuche = bidulealors la référence de bidule est donnée à la variable, mais l'instance précédemment créée existe toujours (jusqu'à ce que le garbage collector se décide à vérifier s'il y a des objets abandonnés et les supprimer).
ToolStripMenuItem subitems = (ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem;répond au besoin, sans perte de temps et d'espace mémoire.
ToolStripMenuItem monSender = sender as ToolStripMenuItem;//caster avec as retourne null si l'objet n'est pas du type demandé if (monSender == null) return; ToolStripDropDownItem parent = monSender.OwnerItem as ToolStripDropDownItem; if (parent == null) return; string objname = monSender.Name; int index = parent.DropDownItems.IndexOf(monSender); string parentname = parent.Name; switch (parentname) { case "mnuDisplayMode": case "tbrDisplayMode": UpdateDisplayMode(index); break; case "mnuOptionsMode": case "tbrOptionsMode": UpdateOptionMode(index); break; } Console.WriteLine("{0} = {1}[{2}]", objname, parentname, index);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionToolStripMenuItem parent = monSender.OwnerItem as ToolStripMenuItem; if (parent == null) { ToolStripDropDownItem parent = monSender.OwnerItem as ToolStripDropDownItem; if (parent == null) return; }
ToolStripMenuItem monSender = sender as ToolStripMenuItem; ToolStripDropDownItem parent = monSender.OwnerItem as ToolStripDropDownItem;
ToolStripDropDownItem parent = (ToolStripDropDownItem)((ToolStripMenuItem)sender).OwnerItem;
ToolStripDropDownItem parent = ((ToolStripMenuItem)sender).OwnerItem as ToolStripDropDownItem;
ToolStripMenuItem caller = sender as ToolStripMenuItem; if (caller == null) return; int index; string objname, parentname; if (caller.OwnerItem is ToolStripMenuItem) // Le parent est un menu { ToolStripMenuItem parent = caller.OwnerItem as ToolStripMenuItem; // Le menu appelant index = parent.DropDownItems.IndexOf(caller); parentname = parent.Name; objname = caller.Name; // Just for debugging } else if (caller.OwnerItem is ToolStripDropDownButton) // Le parent est un bouton { ToolStripDropDownButton subitems = caller.OwnerItem as ToolStripDropDownButton; // Le bouton appelant index = subitems.DropDownItems.IndexOf(caller); parentname = subitems.Name; objname = caller.Name; // Just for debugging } else // Ne devrait pas arriver, mais une erreur d'affectation de handler est toujours possible return; // Dispatching des actions à entreprendre en fonction du nom de l'appelant et de l'index // !!! Seule partie à modifier en fonction de l'application !!! switch (parentname) { case "mnuDisplayMode": case "tbrDisplayMode": UpdateDisplayMode(index); break; case "mnuOptionsMode": case "tbrOptionsMode": UpdateOptionMode(index); break; } Console.WriteLine("{0} = {1}[{2}]", objname, parentname, index);
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.ToolStripItem
System.Windows.Forms.ToolStripDropDownItem
System.Windows.Forms.ToolStripMenuItem
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.ToolStripItem
System.Windows.Forms.ToolStripDropDownItem
System.Windows.Forms.ToolStripDropDownButton
J'ai un peu honte de ne pas y avoir pensé tout seul.Non avec le changement de décors on est un peu perdu, et puis ça fonctionnait le polymorphisme en VB6? Parce que si ça devait te remonter au C++ que tu as dit avoir pratiqué il y a longtemps, on oublie tous des trucs qu'on a pas fait depuis longtemps.
Y a-t-il une grosse différence entre :
ToolStripMenuItem monSender = sender as ToolStripMenuItem;
ToolStripDropDownItem parent = monSender.OwnerItem as ToolStripDropDownItem;
et
ToolStripDropDownItem parent = (ToolStripDropDownItem)((ToolStripMenuItem)sender).OwnerItem;
ou encore :
ToolStripDropDownItem parent = ((ToolStripMenuItem)sender).OwnerItem as ToolStripDropDownItem;
ToolStripDropDownItem parent = (ToolStripDropDownItem)((ToolStripMenuItem)sender).OwnerItem;il faut être sûr et certain que OwnerItem et sender sont du type casté. Et on peut utiliser ce cast sans variable, tu le fais pour sender.
ToolStripMenuItem monSender = sender as ToolStripMenuItem; ToolStripDropDownItem parent = monSender.OwnerItem as ToolStripDropDownItem;là le cast est précédé d'un test, si le test est valide on caste, sinon on retourne null, ça revient à faire un if (toto is Bidule) (Bidule)toto.
C'est là qu'on voit que le C# est autrement plus puissant de VB6heureusement sinon quel serait l'interêt d'évoluer.
toto = array("machin'=>2, "truc"=>8, "bidule"=4); toto["xyz"] = 12; y = toto["truc"];
Toto instance = maListe.SingleOrDefaut(x => x.Name == "le nom")
string name; foreach (ToolStripMenuItem item in caller.DropDownItems) if (item.Checked) { name = item.Name; }
Add(String, String, String)qui "crée un élément avec la clé, le texte et l'image spécifiés et l'ajoute à la collection".
public void test() { lvwFiles.Items.Clear(); lvwFiles.Items.Add("K1", "Ligne 1", null); lvwFiles.Items.Add("K2", "Ligne 2", null); lvwFiles.Items.Add("K3", "Ligne 3", null); lvwFiles.Items.Add("K4", "Ligne 4", null); // ..... foreach (ListViewItem item in lvwFiles.Items) Console.WriteLine(item.Name + " = " + item.Text); }
K1 = Ligne 1 K2 = Ligne 2 K3 = Ligne 3 K4 = Ligne 4
Je ne maitrise pas encore la technique du => qui est très spécifique du C#.C'est ce qu'on appelle une expression lamba, et ça existe dans plusieurs langages, Java par exemple.
double moyenne = mesPersonnes.Average(p => p.Age);
Ce qui veut dire que si je veux stocker des objets simples dans ma liste, des string par exemple, je suis obligé de créer une classe spécifique avec par exemple les propriétés name et value.là ça dépend de ce que tu veux faire, si par exemple c'est retrouver patate en cherchant "patate" (ça m'étonnerait, mais je te le mets quand même)
List<string> maListe = { "Tomane", "Patate", "Fraise" }; string mot = maListe.FirstOrDefault(s => s.ToLower() == "patate");
string name; foreach (ToolStripMenuItem item in caller.DropDownItems) if (item.Checked) { name = item.Name; }
string name = caller.DropnItems.First(m => m.Checked).Name;
caller.DropDownItems[name]je n'ai pas testé non plus mais je n'y crois pas.
LaClasseQuiVaBien monMenu = caller.DropnItems.First(m => m.Checked); monMenu.CeQueTuVeux();
Ce que je cherche à faire, c'est récupérer cette clé dans un traitement comme celui du menu ci-dessus. C'était possible avec l'objet DCOM du même nom. C'est étonnant qu'on ne puisse pas faire la même chose avec celui du Framework.
LaClasseQuiVaBien monMenu = caller.DropnItems.First(m => m.Checked); string cle = (string)monMenu.Tag;