嘿伙计们,你能帮我解决这个问题吗!?我仍在研究如何清除功能区 XML 中组合框控件上的值的答案。到目前为止,我还没有找到合适的解决方案。
我的组合框控件是相互链接的,combobox2 依赖于 combobox1 选择的值,所以每次combobox1 选择的值发生变化时,我都需要清除combobox2 中的数据文本。
我实际上并没有在 VSTO 中完成此操作,但我对 VBA 回调和dropDown
控件进行了类似操作。以下是我的做法,只有回调是 VBA 而不是 VB.NET(未经测试!)
为您的组合框定义回调:
使用getItemCount
,getItemID
和getItemLabel
来定义组合框的内容 - 您必须使用某种状态来了解如何根据第一个组合中的内容填充第二个组合中的值。
在第一个组合上使用onChange
回调来触发第二个组合的失效。您使用对功能区的引用并调用Invalidate
以重新加载整个功能区 ochInvalidateControl(id)
以使特定控件无效(例如第二个组合)
如果你不能让它工作,我推荐 dropDown 控件,它有更多可用的回调和更好的控制(onAction
回调定义了选择的索引,而不是像 comboBox 这样的字符串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)
我现在明白了,它与下拉控件几乎相同。
我在 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
组合框1
<comboBox id="cb1" label="combo1" getItemCount="getCount" getItemLabel="getItem" onChange="onChange_cb1"/>
组合框2
<comboBox id="cb2" label="combo2" getItemCount="getCount" getItemLabel="getItem" getText="setText_cb2" onChange="onChange_cb2"/>