2012-09-18 29 views
1

嘿,你們能幫我把這個弄出來嗎?我仍在研究如何清除Ribbon XML中組合框控件的值。到目前爲止,我找不到合適的解決方案。功能區XML組合框控件來清除值... VB.NET

我的combobox控件相互關聯,combobox2取決於combobox1選擇的值,所以我需要在每次combobox1選擇的值更改時清除combobox2中的數據文本。

回答

2

我在VSTO中並沒有真正做到這一點,但我已經完成了與VBA回調和dropDown控件類似的工作。下面是我會怎麼做,只有回調將是VBA,而不是VB.NET

定義回調您的組合框(未經測試!):

  1. 使用getItemCountgetItemIDgetItemLabel定義組合框的內容 - 您將不得不使用某種狀態來知道如何根據第一個組合中的內容填充第二個組合中的值。

  2. 在第一個組合上使用onChange回調來觸發第二個組合的失效。您可以使用一個參考絲帶,並呼籲Invalidate重新加載整個色帶OCH InvalidateControl(id)無效特定的控制(例如,第二個組合)

如果你不能得到這個工作,我推薦的下拉控制,這有幾個回調可用並更好地控制onAction回調爲選擇定義了一個索引,而不是像組合框onChange那樣的字符串)。

的VB.NET的簽名上面提到的回調:

Function GetItemCount(control As IRibbonControl) as Integer 

Function GetItemID(control As IRibbonControl, itemIndex as Integer) as String 

Function GetItemLabel(control As IRibbonControl, itemIndex as Integer) as String 

Sub OnChange(control As IRibbonControl, text As String) 
0

我得到了現在,它幾乎與下拉控件一樣。

我在Combobox1上使用了Onchange屬性,然後使用invalidateControl觸發combobox2我使用它的getText屬性來清除值。

Public Sub onChange_cb1(ByVal control As Office.IRibbonControl, ByVal text As String) 
ribbon.InvalidateControl("cb2") 'to load cb2 again in the ribbon 
cb2Text = "" 'global var to set the text on cb2 as empty when cb1 has selected a new value 
End Sub 
Public Function setText_cb2(ByVal control As Office.IRibbonControl) As String 
Return cb2Text 'return value 
End Function 

對XML

combobox1

<comboBox id="cb1" label="combo1" getItemCount="getCount" getItemLabel="getItem" onChange="onChange_cb1"/> 

combobox2

<comboBox id="cb2" label="combo2" getItemCount="getCount" getItemLabel="getItem" getText="setText_cb2" onChange="onChange_cb2"/> 
+0

很好聽!如果我的回答對您有幫助,您可以通過單擊答案旁邊的複選標記來關閉該問題。 –