ToolStripSeparator in foreach-Schleife umgehen



  • Hallo,

    ich versuche gerade, in einem Menü bestimme Menüpunkte zu sperren um ein benutzerbezogenes Menüsystem hinzubekommen.

    DAzu übergebe ich an eine Funktion einen Security Level und sperre Menüpunkte entsprechend des Levels.

    Das funktioniert auch solange gut, wie ich keinen Separator in dem Menü habe.

    Dann gibt er einen Fehlermeldung.

    Folgenden Code nutze ich:

    foreach (ToolStripMenuItem item in menuStripE3.Items)
                    {
                        if (item.Text == "Employees" || item.Text == "Enter Charging Information" || item.Text == "Project" || item.Text == "Product" || item.Text == "Bill")
                        {
                            item.Enabled = false;
                        }
                        if (item.Text == "Main")
                        {
                            foreach (ToolStripMenuItem item2 in item.DropDownItems)
                            {
    
                                    if (item2.Text != "Login" || item2.Text != "Exit")
                                    {
                                        item2.Enabled = false;
                                    }
    
                            }
                        }
    

    in der Zeile

    foreach (ToolStripMenuItem item2 in item.DropDownItems)
    

    Kommt die Fehlermeldung, da er den Spearator nicht in ein Item verwandeln kann. Ich verstehe es aber nicht, er sollte in der Schleife den Separator doch gar nicht ansprechen, sondern nur die toolStripItems.

    Kann mir da einer gedanklich auf die Sprünge helfen?

    PS: In VC++ hab ich das schonmal so gemacht, das ging das Problemlos...

    Beste Grüße

    solick



  • Es wird alles genommen was in der Auflistung ist. Verwende den Typ Object in der Foreach (oder Control wenn sicher ist das nur Controls in der Auflistung sind) und prüfe dann bei jedem Durchlauf ob Du ein ToolStripItem hast.

    (Operator as oder is)



  • Danke!

    Mit Control hab ichs nicht hinbekommen (Separator ist doch aber auch von Control abgeleitet oder nicht=) dann hab ichs mit Object gemacht.

    Da das direkte Casten auf ToolstripItem nicht funktionieren wollte, musste ich noch ein Hilfsobjekt Item3 einfügen. Vielleicht noch ne Idee, warum der direkt Cast vor Item2 nicht geklappt hat? Fehlermeldung war, dass die Methoden Text etc. nicht gefunden wurden.

    LG Solick

    foreach (ToolStripMenuItem item in menuStripE3.Items)
                    {
                        if (item.Text == "Employees" || item.Text == "Enter Charging Information" || item.Text == "Project" || item.Text == "Product" || item.Text == "Bill" || item.Text == "Sales Partner")
                        {
                            item.Enabled = false;
                        }
                        if (item.Text == "Main")
                        {
                            foreach (Object item2 in item.DropDownItems)
                            {
                                if (item2 is ToolStripItem)
                                {
                                    ToolStripItem item3 = (ToolStripItem)item2;
    
                                    if (item3.Text != "Login" && item3.Text != "Exit")
                                    {
                                        item3.Enabled = false;
                                    }
                                }
    
                            }
                        }
    


  • foreach (ToolStripMenuItem item in menuStripE3.Items)
    {
    	if (item.Text == "Employees" || item.Text == "Enter Charging Information" || item.Text == "Project" || item.Text == "Product" || item.Text == "Bill" || item.Text == "Sales Partner")
                            item.Enabled = false;
    
    	if (item.Text != "Main")
    		continue;
    
    	foreach (Object item2 in item.DropDownItems)
    	{	
    		ToolStripItem item3 = item2 as ToolStripItem;
    		if(item3 == null)
    			continue;
    
    		if (item3.Text != "Login" && item3.Text != "Exit")
    		    item3.Enabled = false;
    	}
    }
    

    Je nachdem was Du genau treibst kannst Du die Texte auch in nen Array/List werfen und dort suchen.



  • ok Danke!


Anmelden zum Antworten