前阵子接个WinForm应用的小程序,要求按用户的角色动态设置可以使用的菜单项(无权使用的灰色显示)。程序做完了,总结了一下解决问题的思路,拿到这里跟大家交流学习一下。
要求:根据用户登录时的角色,来设置其可以使用的菜单项。
我的思路:首先建立三个表:用户角色表 tb_role ( roid roname ) roid - 角色id ,roname - 角色名称
菜单表 tb_menu ( id fmuname fmuid menuname menucap) fmuname父菜单名,fmuid父菜单id,menuname菜单项的英文名称,menucap菜单项显示的中文名
角色菜单表 tb_rolemenu ( roleid menuid )
当用户登录时,根据其用户角色遍历其能使用的菜单项,然后在程序主窗口中初始化所有菜单项(enable属性设置为false),再将能使用的菜单项的enable属性设置为true。
实现:以上步骤中遍历用户角色及能使用的菜单项容易实现,关键在于菜单初始化(所有菜单及其子菜单项),设置能使用的菜单项和菜单初始化的方法类似。下面详细说明一下:
在WinForm应用中,一级菜单为menuStrip,其子菜单项为ToolStripMenuItem,遍历子菜单项时需要进行对象