我的代码:
private void LoadUserPower(string userPower)
{
foreach (System.Windows.Forms.ToolStripMenuItem item in this.menuStrip_main.Items) //分解权限列表,然后根据权限显示或隐藏工具和菜单栏
{//首先遍历菜单栏
ToolStripMenuItem menuBtn = item as ToolStripMenuItem;
if (userPower.IndexOf(((ToolStripMenuItem)item).Text.Trim()) != -1)
{//如果userPower字符串中存在菜单文本则可用,否则菜单不可用
menuBtn.Enabled = true;
}
else
{
menuBtn.Enabled = false;
}
}
private void LoadUserPower(string userPower)
{
foreach (System.Windows.Forms.ToolStripMenuItem item in this.menuStrip_main.Items) //分解权限列表,然后根据权限显示或隐藏工具和菜单栏
{//首先遍历菜单栏
ToolStripMenuItem menuBtn = item as ToolStripMenuItem;
if (userPower.IndexOf(((ToolStripMenuItem)item).Text.Trim()) != -1)
{//如果userPower字符串中存在菜单文本则可用,否则菜单不可用
menuBtn.Enabled = true;
}
else
{
menuBtn.Enabled = false;
}
}
(whh764224646)等 级:
结帖率:0.00%-----------------------------------
你的结贴率为0~ 系统自动屏蔽 所有回答
for(){
for(){ }
}
}
{
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];
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;
}
}
}
}
}花了一天的时间来研究写出来,但还是有错误
ToolStripDropDownItem newmenu2 = (ToolStripDropDownItem)newmenu.DropDownItems[j];
错误提示:
无法将类型为“System.Windows.Forms.ToolStripSeparator”的对象强制转换为类型“System.Windows.Forms.ToolStripDropDownItem”。
请前辈指点!谢谢~~
ToolStripDropDownItem newmenu2 = (System.Windows.Forms.ToolStripDropDownItem)newmenu.DropDownItems[j];或者用as,这里可能是你转换错误!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WinTest
{
public partial class Form1 : Form
{
DataTable dt;
public Form1()
{
InitializeComponent();
dt = getdata();
} public DataTable getdata()
{
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("parentID");
dt.Columns.Add("title"); Random rand = new Random(); for (int i = 0; i < 15; i++)
{
DataRow dr = dt.NewRow();
dr[0] = i + 1;
dr[1] = (15 % (i + 1) == 0) ? "" : rand.Next(1, 10).ToString();
dr[2] = "name_" + (i + 1).ToString();
dt.Rows.Add(dr);
} return dt;
} private void button2_Click(object sender, EventArgs e)
{
DataRow[] drows = dt.Select("parentID=''");
if (drows.Length > 0)
{
foreach (DataRow item in drows)
{
ToolStripMenuItem toolitem = new ToolStripMenuItem(item["title"].ToString());
DataRow[] children = dt.Select(string.Format("parentID='{0}'", item["id"].ToString()));
if (children.Length > 0)
{
bind(toolitem, item);
}
menuStrip2.Items.Add(toolitem);
}
}
} private void bind(ToolStripMenuItem item,DataRow dr)
{
DataRow[] rows = dt.Select(string.Format("parentID='{0}'",dr["id"].ToString()));
if (rows.Length > 0)
{
foreach (DataRow drv in rows)
{
bind(item,drv);
}
}
else
{
item.DropDownItems.Add(dr["title"].ToString());
}
}
}
}
private void button2_Click(object sender, EventArgs e)
{
InitTree();
}
public void InitTree()
{
DataView dv = this.GetData();
dv.RowFilter = "ParentID=0";
foreach (DataRowView drv in dv)
{
ToolStripMenuItem node = new ToolStripMenuItem();
node.Text = drv["cname"].ToString();
this.menuStrip1.Items.Add(node);
BuildTree(dv, node,drv["cid"].ToString());
}
}
private void BuildTree(DataView dv, ToolStripMenuItem pnode,string parentID)
{
dv.RowFilter = "[ParentID]=" + parentID;
foreach (DataRowView drv in dv)
{
string name = drv["cname"].ToString();
ToolStripMenuItem cnode = new ToolStripMenuItem(name);
DataView ddvv = dv;
ddvv.RowFilter = "[ParentID]=" + parentID;
if (ddvv.Count>0 )
{
pnode.DropDownItems.Add(cnode);
BuildTree(dv, cnode,drv["cid"].ToString());
}
}
}
private DataView GetData()
{
DataTable table = new DataTable();
table.Columns.Add("CID", typeof(int));
table.Columns.Add("CName", typeof(string));
table.Columns.Add("ParentID", typeof(int)); DataRow row0 = table.NewRow();
DataRow row1 = table.NewRow();
DataRow row2 = table.NewRow();
DataRow row3 = table.NewRow();
DataRow row4 = table.NewRow();
DataRow row5 = table.NewRow();
DataRow row6 = table.NewRow();
DataRow row7 = table.NewRow();
DataRow row8 = table.NewRow();
DataRow row9 = table.NewRow(); row0.ItemArray = new object[] { 1, ".net", 0 };
row1.ItemArray = new object[] { 2, "c#", 1 };
row2.ItemArray = new object[] { 3, "asp.net", 1 };
row3.ItemArray = new object[] { 4, "office", 0 };
row4.ItemArray = new object[] { 5, "word", 4 };
row5.ItemArray = new object[] { 6, "excel", 5 };
row6.ItemArray = new object[] { 7, "os", 0 };
row7.ItemArray = new object[] { 8, "unix", 7 };
row8.ItemArray = new object[] { 9, "linux", 8 };
row9.ItemArray = new object[] { 10, "c#.net", 2 }; table.Rows.Add(row0);
table.Rows.Add(row1);
table.Rows.Add(row2);
table.Rows.Add(row3);
table.Rows.Add(row4);
table.Rows.Add(row5);
table.Rows.Add(row6);
table.Rows.Add(row7);
table.Rows.Add(row8);
table.Rows.Add(row9); return table.DefaultView;
}
我想要的效果是
我从数据库中读取到权限字符串为“系统管理:密码及登陆名:重新登陆:退出:辅助工具:计算器:摄像头照相”
在menuStrip控件中有很多菜单项,如果菜单名有包涵在权限字符串中则为可用(.Enabled = true),否则不可用(.Enabled = false)。
如:菜单名为“重新登陆”则启用该菜单名(“重新登陆”在权限字符串中有)
又如:菜单名为“数据维护”则屏蔽该菜单名(“数据维护”在权限字符串中没有)
我的代码就是告诉你如何写递归的啊。郁闷。
给你个我原来写的递归,反正就是调用本身就是递归了,你看着改一下 private void MyTreeView(IList<DeptInfo> depts, string ParentID, TreeNode PNode)
{
depts = GetDeptInfos();
List<DeptInfo> newdepts = new List<DeptInfo>();
IList<EmpInfo> emps = GetEmpInfo();
for (int i = 0; i < depts.Count; i++)
{
if (depts[i].DeptId.ToString().Equals(ParentID))
{
newdepts.Add(depts[i]);
}
}
try
{
if (newdepts.Count > 0)
{
foreach (DeptInfo dept in newdepts)
{ System.Windows.Forms.TreeNode TNode = new System.Windows.Forms.TreeNode(); //创建TNode对像
TNode.Text = dept.Name;
TNode.Name = Convert.ToString(dept.Id);
TNode.Tag = Convert.ToString(dept.DeptId);
TNode.ImageIndex = 1;
TNode.SelectedImageIndex = 1;
TNode.StateImageIndex = 1;
TNode.ContextMenuStrip = cmDept;
TNode.NodeFont = new Font("宋体", 10f);
//显示子点文本
if (PNode == null)
{
this.trvDept.Nodes.Add(TNode);
foreach (EmpInfo emp in emps)
{
if (emp.DeptId == dept.Id)
{
TreeNode empn = new TreeNode();
empn.ForeColor = Color.BlueViolet;
empn.NodeFont = new Font("宋体",9f);
empn.Text = emp.Name;
empn.Name = emp.Id.ToString();
empn.ImageIndex = 0;
empn.ContextMenuStrip = cmUser;
TNode.Nodes.Add(empn);
}
}
}
else
{
PNode.Nodes.Add(TNode);
foreach (EmpInfo emp in emps)
{
if (emp.DeptId == dept.Id)
{
TreeNode empn = new TreeNode();
empn.ForeColor = Color.BlueViolet;
empn.NodeFont = new Font("宋体", 9f);
empn.Text = emp.Name;
empn.Name = emp.Id.ToString();
empn.ImageIndex = 0;
empn.ContextMenuStrip = cmUser;
TNode.Nodes.Add(empn);
}
} //添加子节点
} MyTreeView(depts, dept.Id.ToString(), TNode); //调用MyTreeView
}
}
else
{
return;
}
}
catch (Exception exp)
{
MessageBox.Show(exp.Message); //提示错误信息
}
}
private void LoadUserPower(ToolStripItemCollection root, string userPower)
{
{
if (root.Count == 0)
return;
foreach (var obj in root)
{
if (obj is ToolStripMenuItem)
{
ToolStripMenuItem ddItem = obj as ToolStripMenuItem;
if (userPower.IndexOf(ddItem.Text) != -1)
{
ddItem.Enabled = true;
}
else
{
if (userPower.IndexOf(ddItem.Text) == -1)
{
ddItem.Enabled = false;
}
} LoadUserPower(ddItem.DropDownItems, userPower);
}
}
}
}
#endregion
请试用!