2014-12-04 36 views
1

我覺得完全愚蠢的是無法弄清楚這一點,因爲我知道我錯過了一些簡單的東西。無論如何,我有一個設置窗體,當用戶單擊我爲我的Outlook加載項創建的Outlook功能區上的設置按鈕時打開。在設置中,表單是一個複選框,當用戶選中該框時,我需要更改位於功能區後面的標籤的文本。從另一個表格(VSTO)更新Outlook功能區標籤

我習慣於WPF,所以通常情況下我會在這種情況下調用一個調度器,因爲表單在不同的線程上,但整個調度器事情似乎完全不在VSTO的窗口中。我錯過了什麼? Windows窗體解決方案似乎也無法正常工作。

這是我正在嘗試做的一個例子。這段代碼將會彈出我的設置窗體。

private void statusCheckBox_CheckedChange(object sender, eventargs e) 
{ 
     OutlookRibbon outlookRibbon = new outlookRibbon(); 
     If(statusCheckBox.checked) 
     { 
      outlookRibbon.statusLabel.Label = "Checkbox Checked"; 
     } 
} 

我知道我創造我的色帶的新實例的例子,所以這就是爲什麼我沒有看到標籤更新,但我真的不知道從哪裏何去何從。任何幫助表示讚賞。

+0

你在哪裏創建調用設置表單?色帶正確? – RadioSpace 2014-12-04 00:53:38

+0

是使用'settingsForm.show();' – Tronald 2014-12-04 00:59:41

+0

你可以使用showdialog嗎? – RadioSpace 2014-12-04 05:41:07

回答

0

絲帶從誕生就是一個靜態的東西。您無法直接設置屬性。相反,您需要使用回調來更新控件。當您需要更新控件的狀態時,您需要調用IRibbonUI接口的Invalidate或InvalidateControl方法來強制主機應用程序調用您的回調來獲取新值。例如:

In the XML markup file: 
<customUI … OnLoad=」MyAddInInitialize」 …> 

In the code: 
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 
相關問題