日期:2014-05-17  浏览次数:20722 次

如果编历菜单项,如菜单名在权限字符串有则可可用否则为不可用?
我写的代码如下:

  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;
                        }

                    }

                }
                
                
            }