如果编历菜单项,如菜单名在权限字符串有则可可用否则为不可用?
我写的代码如下:
         private void LoadUserPower(MenuStrip MenuS, string userPower)
         {
             for (int i = 0; i < MenuS.Items.Count; i++) //遍历MenuStrip控件中主菜单项
             {
                 if (userPower.IndexOf(((ToolStripDropDownItem)MenuS.Items[i]).Text) != -1)    //当节点名称与菜单项名称相等时
                 {
                     ((ToolStripDropDownItem)MenuS.Items[i]).Enabled = true;
                 }
                 else
                 {
                     ((ToolStripDropDownItem)MenuS.Items[i]).Enabled = false;
                 }
                 ToolStripDropDownItem newmenu = (ToolStripDropDownItem)MenuS.Items[i];
                 if (newmenu.HasDropDownItems && newmenu.DropDownItems.Count > 0)    //遍历二级菜单项
                     for (int j = 0; j < newmenu.DropDownItems.Count; j++)
                     {
                         if (userPower.IndexOf((newmenu.DropDownItems[j]).Text) != -1)
                         {
                             (newmenu.DropDownItems[j]).Enabled = true;
                         }
                         else
                         {
                             (newmenu.DropDownItems[j]).Enabled = false;
                         }
                         ToolStripDropDownItem newmenu2 = (ToolStripDropDownItem)newmenu.DropDownItems[j];                        if (newmenu2.HasDropDownItems && newmenu2.DropDownItems.Count > 0)  //遍历三级菜单项
                             for (int p = 0; p < newmenu2.DropDownItems.Count; p++)
                             {
                                 if (userPower.IndexOf((newmenu2.DropDownItems[p]).Text) != -1)
                                 {
                                     (newmenu2.DropDownItems[p]).Enabled = true;
                                 }
                                 else
                                 {
                                     (newmenu2.DropDownItems[p]).Enabled = false;
                                 }
                             }
                     }
             }
         }
错误提示为无法将类型为(标红色的部句子)
“System.Windows.Forms.ToolStripSeparator”的对象强制转换为类型“System.Windows.Forms.ToolStripDropDownItem”。
------解决方案--------------------DropDownItems[j]返回的是ToolStripItem,不是ToolStripDropDownItem。。。你是粘贴的代码还是照书上敲的?。。。
------解决方案--------------------因为继承关系是这样的:
ToolStripItem←ToolStripDropDownItem←ToolStripMenuItem
ToolStripItem←ToolStripSeparater
所以你可以把普通菜单项(ToolStripMenuItem)强制转换成(ToolStripDropDownItem),但是不能转ToolStripSeparater,因为它和ToolStripDropDownItem是兄弟类,不能互相转。。
------解决方案--------------------
C# code
for (int i = 0; i < dt.Rows.Count; i++)
            {
                m_menuid = dt.Rows[i]["menuid"].ToString();
                
                
                foreach (ToolStripMenuItem ct1 in menuStrip1.Items)
                {
                    for (int ii = 0; ii < ct1.DropDownItems.Count; ii++)
                    {
                        
                        if (ct1.DropDownItems[ii].Name.ToString() == m_menuid)
                        {
                            ct1.DropDownItems[ii].Visible = false;
                        }
                    }
                }
                
                
            }