menuStrip1.Items[item.Name].Enabled = true;//这个地方总报错,提示没有定义对象???
注释掉后运行,结果一片空白,不知所措!后台数据库表:
id , fmuname,fmuid, menuname,            menucap
1 0 AppManage        投保单管理
2 NULL 0 ReportManage 统计报表
3 NULL 0 SystemManage 系统管理
4 投保单管理 1 AppNewadd 投保单录入
5 投保单管理 1 AppModify 投保单复核
6 投保单管理 1 AppResult 投保单回销
7 统计报表 2 SalReport 承保业绩报表
8 统计报表 2 SalaryReport 营业收入报表
9 统计报表 2 PreSalReport 预收业绩报表
10 NULL 0 usermg 用户设置
11 NULL 0 reion 机构设置
12 NULL 0 dept 部门设置
代码如下:
private void frmMain_Load(object sender, EventArgs e)
        {            InitMenuItem();
            //SetMenuItemByRole();        } #region InitMenuItem()初始化一级菜单
        /// <summary>
        /// InitMenuItem()初始化一级菜单,其父菜单id为0
        /// </summary>
     
        private void InitMenuItem()
        {
            string sql = "select * from tb_menu where fmuid = 0 "; //一级菜单,其父菜单id为0
            //string tb = "tb_menu";
           DataTable dt = boperate .GetTableBySql(sql);
           foreach (DataRow dr in dt.Rows)
            {
             ToolStripMenuItem item = new ToolStripMenuItem();
             item.Name = dr[3].ToString(); //menuname
             menuStrip1.Items[item.Name].Enabled = true;//这个地方总报错,提示没有定义对象???             InitSubMenuItem(menuStrip1.Items[item.Name]);
            }        }
        #endregion        
        #region InitSubMenuItem(ToolStripItem item) 初始化一级菜单的所有子菜单
        
        private void InitSubMenuItem(ToolStripItem item)
        {
            if (item != null)
            {
                string mname = item.Name;                ToolStripMenuItem pItem = (ToolStripMenuItem)item;                //根据父菜单项加载子菜单
                string sql = "select * from tb_menu where fmuname ='" + mname + "'";                DataTable dt = boperate.GetTableBySql(sql);                if (dt.Rows.Count != 0)
                {                    foreach (DataRow dr in dt.Rows)
                    {
                        ToolStripMenuItem subItem = new ToolStripMenuItem();
                        subItem.Name = dr[3].ToString();
                       // subItem.Text = dr[4].ToString();                        try
                        {
                            pItem.DropDownItems[subItem.Name].Enabled = true ;                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message);
                        }
                    }
                }
            }        }
      #endregion         #region SetMenuItemByRole() 根据用户在用户权限表中的权限动态的设置能使用的菜单项。        //对一级菜单进行权限设置
        private void SetMenuItemByRole()
        {
            string sql = "select * from tb_menu where id in" +
                      "(select menuid from tb_rolemenu where roleid='" + frmlogin.M_str_right + "') and fmuid = 0";
            DataTable dt =boperate .GetTableBySql(sql);            foreach (DataRow dr in dt.Rows)
            {
                ToolStripMenuItem item = new ToolStripMenuItem();                item.Name = dr[3].ToString();//一级菜单的menuname               // menuStrip1.Items[item.Name].Enabled = true;//各一级菜单是主菜单menuStrip2集合的项                SetSubMenuItemByRole(menuStrip1.Items[item.Name]);//将一级菜单对应主菜单menuStrip2集合的项传给子菜单设置函数            }
        }        //对一级菜单的所有子菜单进行设置
        private void SetSubMenuItemByRole(ToolStripItem item)
        {
            if (item != null)
            {
                string mname = item.Name;                ToolStripMenuItem pItem = (ToolStripMenuItem)item;                //根据父菜单项加载子菜单
                string sql = "select * from tb_menu where fmuname ='" + mname + "' and id in (select menuid from tb_rolemenu where roleid='" + frmlogin.M_str_right + "')";                DataTable dt = boperate.GetTableBySql(sql);                if (dt.Rows.Count != 0)
                {                    foreach (DataRow dr in dt.Rows)
                    {
                        ToolStripMenuItem subItem = new ToolStripMenuItem();
                        subItem.Name = dr[3].ToString();                        try
                        {
                            pItem.DropDownItems[subItem.Name].Enabled = true;                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message);
                        }
                    }
                }
                else
                {                }            }
        }
        #endregion 

解决方案 »

  1.   

    代码太多,给你个vb动态添加菜单项目.
    Private Sub AddMenu(ByVal fj As Integer, ByVal menu As ToolStripMenuItem, ByVal doc As DataTable)
            Dim Item As System.Windows.Forms.ToolStripMenuItem
            Dim dvTree As New DataView
            dvTree = New DataView(doc)
            dvTree.RowFilter = "parentid= " + fj.ToString
            Dim Row As DataRowView
            For Each Row In dvTree
                If Row("menutype") = 3 Then
                Else
                    If menu Is Nothing Then
                        Item = New System.Windows.Forms.ToolStripMenuItem
                        Item.Name = Row("menuid")
                        Item.Text = Row("menuname").ToString
                        Item.Tag = Row("param") '菜单参数
                        Item.ToolTipText = Row("menutip")
                        Item.Height = 30
                        Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Item})
                        AddMenu(Int32.Parse(Row("menuid").ToString()), Item, doc)
                        'AddHandler Item.MouseDown, AddressOf MenuItem_MouseDown
                        'AddHandler Item.Click, AddressOf MenuItem_Click
                    Else
                        Item = New System.Windows.Forms.ToolStripMenuItem
                        Item.Name = Row("menuid")
                        Item.Text = Row("menuname").ToString
                        Item.Tag = Row("param") '菜单参数
                        Item.ToolTipText = Row("menutip")
                        Item.Height = 30
                        If Row("menutype") = 2 Then
                            AddHandler Item.MouseDown, AddressOf MenuItem_MouseDown
                            AddHandler Item.Click, AddressOf MenuItem_Click
                        End If                    If CBool(Row("shortcut")) = True And CInt(Row("menutype")) = 2 Then Item.Checked = True Else Item.Checked = False
                        menu.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Item})
                        AddMenu(Int32.Parse(Row("menuid").ToString()), Item, doc)
                    End If
                End If
            Next
        End Sub
      

  2.   

    调用
     '添加顶部菜单
     AddMenu(-1, Nothing, common.mymenus)
      

  3.   

    你没有将ToolStripMenuItem加到menuStrip上面去;
            private void InitMenuItem()
            {
                string sql = "select * from tb_menu where fmuid = 0 "; //一级菜单,其父菜单id为0
                //string tb = "tb_menu";
                DataTable dt = boperate.GetTableBySql(sql);
                foreach (DataRow dr in dt.Rows)
                {
                    ToolStripMenuItem item = new ToolStripMenuItem();
                    item.Name = dr[3].ToString(); //menuname
                    menuStrip1.Items.Add(item); //你缺少这个
                    menuStrip1.Items[item.Name].Enabled = true;//这个地方总报错,提示没有定义对象???                InitSubMenuItem(menuStrip1.Items[item.Name]);
                }        }