Autor Beitrag
Bömmel
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 18.02.13 20:19 
Hallo.

Ich habe ein MenuStrip folgendermaßen aufgebaut:
ausblenden 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:
ausblenden 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(652196);
                pictureBox1.Location = new System.Drawing.Point(6084);
                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:
ausblenden 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 user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 18.02.13 20:38 
Hallo und :welcome:

einfach weiter verschachtelt (mittels DropDownItems) darauf zugreifen, d.h.
ausblenden C#-Quelltext
1:
((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[2]).DropDownItems[0]					
Bömmel Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 18.02.13 21:12 
Hallo Th69. Danke für die schnelle Antwort.

Das ist mein eigentliches Problem:

Ich komme bis hier:
ausblenden 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:
ausblenden 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:
ausblenden 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 user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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:
ausblenden volle Höhe 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 user profile iconTh69: C#-Tags hinzugefügt: demnächst bitte selber setzen, danke!