Entwickler-Ecke
C# - Die Sprache - menuStrip - Verständnisfrage, Items im Untermenue
Bömmel - Mo 18.02.13 20:19
Titel: menuStrip - Verständnisfrage, Items im Untermenue
Hallo.
Ich habe ein MenuStrip folgendermaßen aufgebaut:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| menuStrip1.Items.Add("Eingang"); menuStrip1.Items.Add("Funktionen"); menuStrip1.Items.Add("Hilfe"); ToolStripMenuItem Misc = (ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[2]).DropDownItems.Add("Misc"); Misc.DropDownItems.Add("Anschlussbild"); Misc.DropDownItems[0].Click += new EventHandler(menuEvent); Misc.DropDownItems.Add("User Manual"); Misc.DropDownItems[1].Click += new EventHandler(menuEvent); ToolStripMenuItem Quelle = (ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems.Add("Quelle"); Quelle.DropDownItems.Add("Video"); Quelle.DropDownItems[0].Click += new EventHandler(menuEvent); Quelle.DropDownItems.Add("Comp1"); Quelle.DropDownItems[1].Click += new EventHandler(menuEvent); Quelle.DropDownItems.Add("Comp2"); Quelle.DropDownItems[2].Click += new EventHandler(menuEvent);
... |
Dazu der Eventhandler:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| private void menuEvent(object sender, EventArgs e) { ToolStripItem item = (ToolStripItem)sender; int ArrZeile = 0; textBox3.Clear(); for (int i = 0; i <= 49; i++) { if (commands[i, 2] == item.Text) { ArrZeile = i; textBox2.Text = commands[ArrZeile, 1]; textBox3.Text = item.Text; dialog_einblenden(); } } if (item.Text == "Anschlussbild") { pictureBox1.Size = new System.Drawing.Size(652, 196); pictureBox1.Location = new System.Drawing.Point(60, 84); pictureBox1.Visible = true; } if (item.Text == "User Manual")
... |
Es funktioniert auch gut. Nun möchte ich aber für einige Funktionen die Möglichkeit haben, direkte Items anzusprechen.
Das mache ich folgendermaßen:
C#-Quelltext
1:
| ((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[2]).irgendwas |
Hier komme ich aber nur bis in die direkten Menü-Unterpunkte.
Wie komme ich an die Items in den verschachtelten Untermenüs heran, z.B für checked o.ä.?
Ich hoffe, Ihr könnt mir helfen, Google ist schon leergesucht...
Grüße
Bömmel
PS: Bitte langsam schreiben, komme aus der Phyton/Perl-Ecke :D
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - Mo 18.02.13 20:38
Hallo und :welcome:
einfach weiter verschachtelt (mittels
DropDownItems) darauf zugreifen, d.h.
C#-Quelltext
1:
| ((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[2]).DropDownItems[0] |
Bömmel - Mo 18.02.13 21:12
Hallo Th69. Danke für die schnelle Antwort.
Das ist mein eigentliches Problem:
Ich komme bis hier:
C#-Quelltext
1:
| ((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[0]).Checked = true; |
Wenn ich nach dem letzten DropDownItems einen Punkt setze, wird mir das Objekt auch angeboten.
Setzte ich aber das Checked dran:
C#-Quelltext
1:
| ((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[0]).DropDownItems[0].Checked = true; |
Was jetzt als Objekt nicht zur Verfügung steht, erhalte ich logischerweise eine Fehlermeldung:
Quelltext
1:
| "System.Windows.Forms.ToolStripItem" enthält keine Definition für "Checked", und es konnte keine Erweiterungsmethode "Checked" gefunden werden, die ein erstes Argument vom Typ "System.Windows.Forms.ToolStripItem" akzeptiert. |
Gruß
Bömmel
Moderiert von
Th69: C#-Tags hinzugefügt
Ralf Jansen - Mo 18.02.13 21:37
Weil du den letzten Zugriff auch noch auf ToolStripMenuItem casten muss sonst hast du nur einen ToolStripDropDownItem Verweis der Checked noch nicht kennt.
Bömmel - Di 19.02.13 20:14
Hallo Leute, erstmal vielen Dank für die Hilfe.
Ich habe jetzt eine Lösung, die evtl. etwas "abstrakt" ist.
Vorteil ist, dass der ausgewählte Menüpunkt nicht mehr auszuwählen ist, da der geänderte Name im Array nicht mehr gefunden wird und so nichts auslösen kann:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| if (item.Text == "Video") { senden("inv"); MenueSelect("Video"); } if (item.Text == "Comp1") { senden("in1"); MenueSelect("Comp1"); } if (item.Text == "Comp2") { senden("in2"); MenueSelect("Comp2"); } } private void MenueSelect(string Quelle) { ToolStripItem x = (((ToolStripMenuItem) ((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[0]).DropDownItems[0]); ToolStripItem y = (((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[0]).DropDownItems[1]); ToolStripItem z = (((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[0]).DropDownItems[2]);
if (Quelle == "Video") { x.Text = "Aktiv: " + x.Text; y.Text = "Comp1"; z.Text = "Comp2"; } else if (Quelle == "Comp1") { x.Text = "Video"; y.Text ="Aktiv: " + y.Text; z.Text = "Comp2"; } else if (Quelle == "Comp2") { x.Text = "Video"; y.Text = "Comp1"; z.Text = "Aktiv: " + z.Text; } } |
Ist vielleicht für die Profis "frickelei", aber läuft...
Gruß
Bömmel
Moderiert von
Th69: C#-Tags hinzugefügt: demnächst bitte selber setzen, danke!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!