如何遍历toolStrip1控件上的所有项目,并将设置其Enabled = false;但是遇到ToolStripSeparator项就会报错,该如何处理?

解决方案 »

  1.   

    既然你知道是ToolStripSeparator,那就判断一下,对其做特殊处理
      

  2.   

    现在的问题是:toolStrip1控件嵌套了很多项,各种都有,判断ToolStripSeparator后遍历又成问题了.弄了一晚上也没有搞定,郁闷.
      

  3.   

    xxx.Enabled = false;改成if(xxx is ToolStripSeparator)
        continue;
    xxx.Enabled = false;
      

  4.   

    public static class myToolStrip
            {
                public static void SetEnabled(ToolStrip myToolStrip)
                {
                    for (int i = 0; i < myToolStrip.Items.Count; i++)
                    {
                        //
                        //先控制第一级控件,并且ToolStripLabel, ToolStripButton, ToolStripTextBox ,ToolStripComboBox,ToolStripProgressBar 无级联菜单
                        //
                        myToolStrip.Items[i].Enabled = false;
                        //
                        // ToolStripMenuItem, ToolStripSplitButton ,ToolStripDropDownButton 有级联菜单
                        //
                        TraverseItems(myToolStrip.Items[i]);
                    }               
                }            private static void TraverseItems(ToolStripItem myItems)
                {
                    if (!(myItems is ToolStripSeparator))
                    {
                        myItems.Enabled = false;
                        if (myItems is ToolStripMenuItem)
                        {
                            ToolStripMenuItem myMenuItem = (ToolStripMenuItem)myItems;
                            if (myMenuItem.DropDownItems.Count > 0)
                            {
                                for (int i = 0; i < myMenuItem.DropDownItems.Count; i++)
                                {
                                    myItems.Enabled = false;
                                    TraverseItems(myMenuItem.DropDownItems[i]);
                                }
                            }
                        }
                        //
                        if (myItems is ToolStripSplitButton)
                        {
                            ToolStripSplitButton mySplitButton = (ToolStripSplitButton)myItems;
                            if (mySplitButton.DropDownItems.Count > 0)
                            {
                                for (int i = 0; i < mySplitButton.DropDownItems.Count; i++)
                                {
                                    myItems.Enabled = false;
                                    TraverseItems(mySplitButton.DropDownItems[i]);
                                }
                            }
                        }
                        //
                        if (myItems is ToolStripDropDownButton)
                        {
                            ToolStripDropDownButton myDropDownButton = (ToolStripDropDownButton)myItems;
                            if (myDropDownButton.DropDownItems.Count > 0)
                            {
                                for (int i = 0; i < myDropDownButton.DropDownItems.Count; i++)
                                {
                                    myItems.Enabled = false;
                                    TraverseItems(myDropDownButton.DropDownItems[i]);
                                }
                            }
                        }
                    }                           }
    }我是这样写的,可是还是有问题,请大家帮我看一看.
      

  5.   

    #region 遍历设置ToolStrip控件
            public static class myToolStrip
            {
                public static void SetEnabled(ToolStrip myToolStrip)
                {
                    for (int i = 0; i < myToolStrip.Items.Count; i++)
                    {
                        //
                        //先控制第一级控件,并且ToolStripLabel, ToolStripButton, ToolStripTextBox ,ToolStripComboBox,ToolStripProgressBar 无级联菜单
                        //
                        myToolStrip.Items[i].Enabled = false;
                        //
                        // ToolStripMenuItem, ToolStripSplitButton ,ToolStripDropDownButton 有级联菜单
                        //
                        TraverseItems(myToolStrip.Items[i]);
                    }
                }            private static void TraverseItems(ToolStripItem myItems)
                {
                    if (!(myItems is ToolStripSeparator))
                    {
                        myItems.Enabled = false;
                        //
                        if (myItems is ToolStripMenuItem)
                        {
                            ToolStripMenuItem myMenuItem = (ToolStripMenuItem)myItems;
                            for (int i = 0; i < myMenuItem.DropDownItems.Count; i++)
                            {
                                myMenuItem.DropDownItems[i].Enabled = false;
                                TraverseItems(myMenuItem.DropDownItems[i]);
                            }
                        }
                        //
                        if (myItems is ToolStripSplitButton)
                        {
                            ToolStripSplitButton mySplitButton = (ToolStripSplitButton)myItems;
                            for (int i = 0; i < mySplitButton.DropDownItems.Count; i++)
                            {
                                mySplitButton.DropDownItems[i].Enabled = false;
                                TraverseItems(mySplitButton.DropDownItems[i]);
                            }
                        }
                        //
                        if (myItems is ToolStripDropDownButton)
                        {
                            ToolStripDropDownButton myDropDownButton = (ToolStripDropDownButton)myItems;
                            for (int i = 0; i < myDropDownButton.DropDownItems.Count; i++)
                            {
                                myDropDownButton.DropDownItems[i].Enabled = false;
                                TraverseItems(myDropDownButton.DropDownItems[i]);
                            }
                        }
                    }
                }
            }
            #endregion
    这样改感觉可以了.想简化一下代码.