2017-02-01 70 views
0

我在與約會窗口關聯的自定義功能區中有一個按鈕,該按鈕在運行後被禁用,並且修復了新窗口的打開。在自定義功能區Outlook中啓用禁用按鈕

目前我寫了下面的代碼禁用了按鈕。

public bool active = true; 

    public bool GetEnabled(Office.IRibbonControl control) 
    { 
     return active; 
    } 

    public void OnAddLinktButton(Office.IRibbonControl control) 
    { 
     try 
     { 
      active = false; 
      var inspec = this.Application.ActiveInspector().CurrentItem; 
      if (inspec is Outlook.AppointmentItem) 
      { 
       ribbon.InvalidateControl(control.Id); 
       Appointment_Value gapp = new Appointment_Value(true, inspec); 
       gapp.Show(); 
      } 
     } 
     catch (Exception ex) 
     { 
      Logger.Info("The following error occurred: " + ex.Message); 
     } 
    } 

我不能這樣做,使開放。對於現在的代碼,每一個想法或修正都是受歡迎的。

回答

0

我已經注意到下面的代碼行:

var inspec = this.Application.ActiveInspector().CurrentItem; 

您需要使用IRibbonControl接口的Context屬性來獲取它代表包含觸發回調過程的Ribbon用戶界面活動窗口中的對象 - Explorer或Inspector。

要啓用按鈕,您需要使用IRibbonUI接口的InvalidateInvalidateControl方法。

例如,原始草圖在VB.NET:

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 

正如你所看到的IRibbonUI接口的實例被傳遞到功能區XML聲明的回調的onLoad:

<customUI … OnLoad=」MyAddinInitialize」 …> 

在MSDN的以下系列文章中閱讀有關Fluent UI(又名Ribbon UI)的更多信息:

+0

謝謝你的答案,但我不明白你的建議。如果您的意思是在Inizialize函數中使用Invalidate,那麼在C#中它應該是Ribbon_load,我已經嘗試設置action = true並調用MyRibbon.Invalidate()。但不起作用 – FeroX

+0

是否調用了GetEnabled回調?您是否嘗試調試代碼? –

+0

如果我以一種通用的方式詢問我,如果我已經調試過了,我只能回答是,但當然這取決於您期望我在調試過程中進行了搜索。據我所知,GetEnabled是允許我設置按鈕屬性getEnabled的值的回調函數。我寫的是被調用的函數,調用它的過程隱含在框架中,我不深入瞭解他的步驟。 – FeroX

0

我解決我的問題改變了以前的代碼

public bool GetEnabled(Office.IRibbonControl control) 
    { 
     bool active = true; 
     string Appointment_body = control.Context.CurrentItem.Body; 
     if (!string.IsNullOrEmpty(Appointment_body) && !Appointment_body.Equals(" ")) 
     { 
      active = false; 
     } 
     return active; 
    } 
    public void OnAddLinktButton(Office.IRibbonControl control) 
    { 
     try 
     { 
      var inspec = this.Application.ActiveInspector().CurrentItem; 
      if (inspec is Outlook.AppointmentItem) 
      { 
       Appointment_Value gapp = new Appointment_Value(true, inspec, ribbon); 
       gapp.Show(); 
      } 
     } 
     catch (Exception ex) 
     { 
      Logger.Info("The following error occurred: " + ex.Message); 
     } 
    } 

基本上我檢查,如果身體不爲空,在這種情況下,我禁用按鈕,然後進入創建約會(appointment_value)功能的函數來放置一個ribbon的ribbon值。invalidate()

相關問題