菜单与权限管理
菜单的功能区、功能组以及所有的菜单组件,都有Visible和Enabled属性,这样我们可以根据登录用户的不同,隐藏和禁用某些菜单项目,实现菜单的授权。
示例一
我们增加一个用户“录入员”,如果该用户登录,隐藏“数据表”和“管理项目”两个功能区,并禁用杂项功能区的“执行SQL”和 “命令窗口”两个按钮。
第一步当然是增加一个名为“录入员”的用户,然后在菜单系统事件LoadUserSetting加入如下代码:
If
User.Name = "录入员" Then设计完成后,请切换到录入员用户,看看是否已经实现设计要求。
示例二
在默认情况下,锁定某个表,将不能修改此表的数据,也不能增加或删除行,但是可以增加、删除、更改列;也就是说,锁定表只是保护数据,却不保护结构。
如果希望表被锁定的情况下,能同时禁止修改数据和结构,可以在系统事件CurrentTableChanged中设置代码:
If
CurrentTable.AllowEdit
Then
RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled
= True
RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled
= True
RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled
= True
RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled
= True
Else
RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled
= False
RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled
= False
RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled
= False
RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled
= False
End
If
原理很简单,在选择不同的表之后,根据当前表(CurrentTable)的AllowEdit属性,来禁止或启用与修改表结构相关的菜单按钮。
上面的代码也可以简化为:
RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled
= CurrentTable.AllowEdit
RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled
= CurrentTable.AllowEdit
RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled
= CurrentTable.AllowEdit
RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled
= CurrentTable.AllowEdit
示例三
举一反三,同样我们可以在MainTableChanged或CurrentTableChanged事件中设置代码,使得选择某些表后,自动禁用指定的菜单命令,而选择另一些表后,则自动启用指定的菜单命令。
例如我们在MainTableChanged设置如下的代码:
Select
Case MainTable.name
Case
"表A","表C"
RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled
= True
RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled
= True
RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled
= True
RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled
= True
Case
"表B"
RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled
= False
RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled
= False
RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled
= False
RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled
= False
End
Select
这样我们选择表A或者表C的时候,可以通过菜单命令修改其表结构,而选择表B的时候,将无法通过菜单命令修改其结构,因为相关菜单命令已经禁用。