我正在开发一个多用户应用程序,它使用自定义功能区来检索功能,并将前端作为访问权限。我是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
这确实很有效,但是问题是:我在自定义功能区上有多个选项卡,并且某些用户没有权限使用确定的选项卡上的任何表单,例如:“注册选项卡”,当功能区失效时,用户可以看到该标签,但其中没有按钮。我想实现的是:如果确定的选项卡上没有可见的按钮,也使其不可见,该如何实现?
抱歉英语不好!我正在努力!
答案 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)的更多信息: