2016-12-15 3 views
1

Я искал много раз для решения этого и ближайшего решения Рон де Бруин example но это не распространяется на то, что мне нужно.Включение/отключение ленты управления Самостоятельно

Я пытаюсь сделать, это по существу 2 вещи

Пример: У меня есть 4 кнопки.

Button1 на Group1 и tab1

Button2 на Group1 и tab1

Button3 на группа_2 и Таб2

Button4 на группа_2 и Таб2

  1. Когда управление лентой "Button1" кликнул, что он запустит некоторый код и отключит «Button1» в конце.

  2. Когда нажата кнопка управления лентой «Button2», она запустит некоторый код и проверит «Button3» и «button4» и установит противоположные свойства.

Если кнопка3 была правдой, она становится ложной.

Если Button4 было ложным, оно становится правдой.

Можете ли вы дать некоторые ориентиры для решения этой

+0

Можете ли вы подробнее? Одна и та же лента нажата в первый раз, а затем второй раз? что вы подразумеваете под «на одной и той же вкладке»? –

ответ

3

Ok, все кнопки имеют GetEnabled события, поэтому, когда лента включает/обновления - событие уволят! (просто).

Callback функция на это событие выглядит следующим образом:

Sub Button_GetEnabled(control As IRibbonControl, ByRef enabled) 
'(enabled = true to enable) 
    enabled = EnableButtons 
End Sub 

Так давайте начнем! В вашем модуле с функциями обратного вызова вам нужен глобальный (глобальный для обратных вызовов) логический smth, например EnableButtons.

И когда лента загружает этот пример кода срабатывает установка флага в True:

Private Sub OnRib_Load(ribbonUI As IRibbonUI) 
    Set MyRibbonUI = ribbonUI 
    EnableButtons = True 
End Sub 

И на каждой кнопке вам нужно обратного вызова для GetEnabled события, описанного выше.

После этого - все кнопки включены! Так что мы можем здесь сделать? Давайте посмотрим на OnAction обратного вызова до нужной кнопки:

Sub Button_Click(control As IRibbonControl) 
    EnableButtons = False 
    MyRibbonUI.Invalidate 
    'do some stuff - buttons disabled 
    EnableButtons = True 
    MyRibbonUI.Invalidate 
End Sub 

Так Invalidate метод «обновления» все элементы управления. Вы можете попробовать InvalidateControl желаемого контроля (который является более предпочтительным способом, чем Invalidate, из-за производительность), но я думаю, что более элегантный способ, чтобы разместить обратные вызовы и событие только на кнопки, которые вы хотите!

Итак, наконец-то, что вам нужна ссылка на ленту, булев флаг и _GetEnabled события.

More here

1

Explantion предоставлена ​​Commonsense помочь мне построить, что окончательное решение по пересмотренным поставленный вопрос. Thanks

Option Explicit 

Public MyRibbonUI As IRibbonUI 
Public EnableButton1 As Boolean 
Public EnableButton2 As Boolean 
Public EnableButton3 As Boolean 
Public EnableButton4 As Boolean 


Public Sub OnRib_Load(ribbon As IRibbonUI) 
' 
' Code for onLoad callback. Ribbon control customUI 
' 
Set MyRibbonUI = ribbon 
    EnableButton1 = True 
    EnableButton2 = True 
    EnableButton3 = True 
    EnableButton4 = False 

End Sub 


Public Sub Button_GetEnabled(control As IRibbonControl, ByRef Enabled) 
' 
' Code for getEnabled callback. Ribbon control button 
' 
Select Case control.ID 

    Case "Button1" 
     Enabled = EnableButton1 
    Case "Button2" 
     Enabled = EnableButton2 
    Case "Button3" 
     Enabled = EnableButton3 
    Case "Button4" 
     Enabled = EnableButton4 

End Select 

End Sub 

Public Sub Button1_onAction(control As IRibbonControl) 
' 
' Code for onAction callback. Ribbon control button 
' 
EnableButton1 = False 
MyRibbonUI.InvalidateControl ("Button1") 


End Sub 
Public Sub Button2_onAction(control As IRibbonControl) 
' 
' Code for onAction callback. Ribbon control button 
' 
If EnableButton3 = False Then 
    EnableButton3 = True 
Else 
    EnableButton3 = False 
End If 

MyRibbonUI.InvalidateControl ("Button3") 

If EnableButton4 = False Then 
    EnableButton4 = True 
Else 
    EnableButton4 = False 
End If 

MyRibbonUI.InvalidateControl ("Button4") 

End Sub 
Public Sub Button3_onAction(control As IRibbonControl) 
' 
' Code for onAction callback. Ribbon control button 
' 

End Sub 
Public Sub Button4_onAction(control As IRibbonControl) 
' 
' Code for onAction callback. Ribbon control button 
' 
End Sub 
Смежные вопросы