我的代码:
        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;
                }
            }

解决方案 »

  1.   

    whh764224646
    (whh764224646)等 级: 
    结帖率:0.00%-----------------------------------
    你的结贴率为0~ 系统自动屏蔽 所有回答
      

  2.   

    for(){
         for(){
                 for(){             }
         }
    }
      

  3.   

            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];
                            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”。
    请前辈指点!谢谢~~
      

  4.   

    ToolStripDropDownItem newmenu2 = (ToolStripDropDownItem)newmenu.DropDownItems[j];这样转换一下:
    ToolStripDropDownItem newmenu2 = (System.Windows.Forms.ToolStripDropDownItem)newmenu.DropDownItems[j];或者用as,这里可能是你转换错误!
      

  5.   


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

  6.   

    上面的代码在构造DataTable的时候有问题,不好意思。请看下面的代码。这个是调试通过的。
     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;
            }
      

  7.   

    http://img.my.csdn.net/uploads/201209/17/1347884753_5642.png
      

  8.   

    你好!你可能没理解我想要的效果吧!
    我想要的效果是
    我从数据库中读取到权限字符串为“系统管理:密码及登陆名:重新登陆:退出:辅助工具:计算器:摄像头照相”
    在menuStrip控件中有很多菜单项,如果菜单名有包涵在权限字符串中则为可用(.Enabled = true),否则不可用(.Enabled  = false)。
    如:菜单名为“重新登陆”则启用该菜单名(“重新登陆”在权限字符串中有)
    又如:菜单名为“数据维护”则屏蔽该菜单名(“数据维护”在权限字符串中没有)
      

  9.   

    能否有源码分享一下呢?我的QQ邮箱:[email protected] 谢谢!
      

  10.   

    @whh764224646:
    我的代码就是告诉你如何写递归的啊。郁闷。
      

  11.   


    给你个我原来写的递归,反正就是调用本身就是递归了,你看着改一下 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);                                         //提示错误信息
                }
            }
      

  12.   

            #region 窗体加载时加载权限
            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
    请试用!