我一直在寻找解决方案很多次,最接近的解决方案是 Ron de Bruin示例,但它没有涵盖我需要的内容。
我想做的基本上是两件事
示例:我有 4 个按钮。
Group1 和 tab1 上的 Button1
Group1 和 tab1 上的 Button2
Group2 和 tab2 上的 Button3
Group2 和 tab2 上的 Button4
单击功能区控件“Button1”时,它将运行一些代码并在最后禁用“Button1”。
单击功能区控件“Button2”时,它将运行一些代码并检查“Button3”和“button4”并设置相反的属性。
如果 button3 为真,则变为假。
如果 button4 为假,则变为真。
你能提供一些指导来解决这个问题吗
好的,所有按钮都有GetEnabled事件,所以当功能区激活/更新时 - 事件触发!(简单的)。
此事件的回调函数如下所示:
Sub Button_GetEnabled(control As IRibbonControl, ByRef enabled)
'(enabled = true to enable)
enabled = EnableButtons
End Sub
Run Code Online (Sandbox Code Playgroud)
那么让我们开始吧!在具有回调函数的模块中,您需要一个全局(全局到回调)布尔值,例如EnableButtons.
当功能区加载此代码示例时,将设置标志设置为True:
Private Sub OnRib_Load(ribbonUI As IRibbonUI)
Set MyRibbonUI = ribbonUI
EnableButtons = True
End Sub
Run Code Online (Sandbox Code Playgroud)
在每个按钮上,您都需要对GetEnabled上述事件进行回调。
之后 - 所有按钮都已启用!那么我们可以在这里做什么?让我们看看你想要的按钮的 OnAction 回调:
Sub Button_Click(control As IRibbonControl)
EnableButtons = False
MyRibbonUI.Invalidate
'do some stuff - buttons disabled
EnableButtons = True
MyRibbonUI.Invalidate
End Sub
Run Code Online (Sandbox Code Playgroud)
所以Invalidate方法“更新”所有控件。您可以尝试InvalidateControl所需的控制(这是一种更可取的方式,Invalidate由于性能而不是),但我认为更优雅的方式是仅在您想要的按钮上放置回调和事件!
因此,最后,您需要引用功能区、布尔标志和_GetEnabled事件。