首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

如其编历菜单项,如菜单名在权限字符串有则可可用否则为不可用

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

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

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

热点排行