public static void EnableMenu(System.Windows.Forms.MenuStrip menu)
        {
            //得到登录的用户对象 
            UserInfo user = GlobaoUser.GetInstance().LoginUser;
            if (user.UserName == "admin")
            {
                return;
            }
            //获取用户的所有权限
            DataTable dt = MenuService.GetUserMenuRole(user.UserId);            int count = menu.Items.Count;
            for (int i = 0; i < count; i++)
            {
                //得到主菜单的一级菜单
                System.Windows.Forms.ToolStripItem item = menu.Items[i];
                //如果一级菜单有权限访问,那么继续判断二级菜单。
                if (EnableMenuItem(item as System.Windows.Forms.ToolStripDropDownItem, dt))
                {
                    int ijcount = ((System.Windows.Forms.ToolStripMenuItem)item).DropDownItems.Count;
                    for (int j = 0; j < ijcount; j++)
                    {
                        // 到这就报 错误 未处理 System.ArgumentOutOfRangeException
  //Message="索引超出范围。必须为非负值并小于集合大小。\r\n参数名: index"
                        EnableMenuItem(((System.Windows.Forms.ToolStripDropDownItem)item).DropDownItems[i] as System.Windows.Forms.ToolStripDropDownItem, dt);
                    }
                }
                else
                {
                    //如果主菜单都没有权限访问那么,子菜单也不能访问
                    int ijcount2 = ((System.Windows.Forms.ToolStripMenuItem)item).DropDownItems.Count;
                    for (int j = 0; j < ijcount2; j++)
                    {
                        ((System.Windows.Forms.ToolStripMenuItem)item).DropDownItems[j].Visible = false;
                    }
                }
            }
        }
        //禁用菜单项
        private static bool EnableMenuItem(System.Windows.Forms.ToolStripDropDownItem item, DataTable menus)
        {
            for (int i = menus.Rows.Count - 1; i >= 0; i--)
            {
                if (item.Text.Trim() == "-")
                {
                    item.Visible = true;
                    return true;
                }
                else if (item.Text.Trim().Replace(" ", "").Replace(" ", "").Equals(menus.Rows[i]["MenuName"].ToString().Trim()))
                {
                    item.Visible = true;
                    return true;
                }
            }
            item.Visible = false;
            return false;
        }
------------------------------------------------------
  public static DataTable GetUserMenuRole(string userId)
         {
             string sql = "";
             if (userId == "admin")
             {
                 sql = @"SELECT  MenuInfo.menuName FROM MenuInfo";
             }
             else {
                  sql = @"SELECT  UserInfo.UserId, UserMenuInfo.MenuId,MenuInfo.menuName
                        FROM MenuInfo, UserInfo INNER JOIN UserMenuInfo ON UserInfo.UserId = UserMenuInfo.UserId " +
              " WHERE (([menuInfo].[menuId]=[userMenuInfo].[menuId]) AND ([userinfo].[userid]=[usermenuInfo].[userid]) AND (UserInfo.UserId='" + userId + "')) ;";             }
             return AccessHelper.GetDataTable(sql);
         }-------------------------
数据
UserId MenuId
2009620161533 6001
2009620161533 6002
2009620161533 6MenuId menuName ParentMenuId
6 帮助 0
6001 帮助 6
6002 关于 6
高手们 看看哪出问题了。。
窗体上的菜单要比 数据库里面的菜单多   
窗体上的菜单显示的跟数据库里面一样,部门数据库里面没有的菜单栏给隐藏了