当没有可见按钮时隐藏功能区选项卡

时间:2018-06-22 19:51:04

标签: ms-access ribbon

我正在开发一个多用户应用程序,它使用自定义功能区来检索功能,并将前端作为访问权限。我是VBA中级开发人员,但是对XML功能区的经验很少。

好,该场景:我有一个表,该表将用户与定义权限的表单相关联,当我的用户登录时,我运行该表并编写一个具有当前用户权限的数组。我所有的功能区按钮都具有GetVisible =“ GetVisibleCallback”,因此,当功能区失效时,回调将使用以下代码对数组进行检查以隐藏/取消隐藏按钮:

Public Sub GetVisibleCallback(control As IRibbonControl, ByRef visible As Variant)
If IsEmpty(arrayPermissoes) Then
    visible = False
Else
    If UBound(Filter(arrayPermissoes, control.Tag)) > -1 Then
        visible = True
    Else
        visible = False
    End If
End If
End Sub

这确实很有效,但是问题是:我在自定义功能区上有多个选项卡,并且某些用户没有权限使用确定的选项卡上的任何表单,例如:“注册选项卡”,当功能区失效时,用户可以看到该标签,但其中没有按钮。我想实现的是:如果确定的选项卡上没有可见的按钮,也使其不可见,该如何实现?

抱歉英语不好!我正在努力!

1 个答案:

答案 0 :(得分:0)

tab控件提供getVisible回调。因此,您可以检查是否允许用户查看。您也可以考虑调用Invalidate界面的IRibbonUI方法,该方法允许使Ribbon用户界面的所有控件的缓存值无效。

您可以使用回调过程来自定义功能区UI。对于实现的每个回调,都将缓存响应。例如,如果解决方案编写者为按钮实现了getImage回调过程,则该函数被调用一次,图像被加载,然后如果图像需要更新,则使用缓存的图像而不是调用该过程。 。此过程将一直保持原状,直到代码使用Invalidate方法表示已缓存的值无效为止,这时再次调用回调过程并缓存返回响应。

 <customUI … OnLoad="MyAddinInitialize" …>

...

  Dim MyRibbon As IRibbonUI 

  Sub MyAddInInitialize(Ribbon As IRibbonUI) 
    Set MyRibbon = Ribbon 
  End Sub 

  Sub myFunction() 
    MyRibbon.Invalidate() ' Invalidates the caches of all of this add-in's controls 
  End Sub

在以下系列文章中了解有关Fluent UI(又称为Ribbon UI)的更多信息: