如果编历菜单项,如菜单名在权限字符串有则可可用否则为不可用?
我写的代码如下:
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;
}
}
}
}