1

ねえみんな、これを理解するのを手伝ってくれませんか!? リボン XML のコンボボックス コントロールの値をクリアする方法については、まだ調査中です。これまでのところ、適切な解決策を見つけることができませんでした。

私のコンボボックス コントロールは互いにリンクされています。combobox2 は、combobox1 の選択された値に依存するため、combobox1 の選択された値が変更されるたびに、combobox2 のデータ テキストをクリアする必要があります。

4

2 に答える 2

3

VSTO で実際にこれを行ったことはありませんが、VBA コールバックとdropDownコントロールで同様のことを行いました。以下は私がそれを行う方法です。コールバックのみがVB.NETではなくVBAになります(テストされていません!)

コンボボックスのコールバックを定義します:

  1. とを使用してgetItemCount、コンボボックスの内容を定義します。最初の内容に基づいて 2 番目のコンボに値を入力する方法を知るには、ある種の状態を使用する必要があります。getItemIDgetItemLabel

  2. 最初のコンボでコールバックを使用してonChange、2 番目のコンボの無効化をトリガーします。リボンへの参照と呼び出しInvalidateを使用して、リボン全体をリロードしInvalidateControl(id)、特定のコントロール (2 番目のコンボなど) を無効にします。

これを機能させることができない場合は、ドロップダウン コントロールをお勧めします。これには、利用可能なコールバックがいくつかあり、より適切に制御できます(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)
于 2012-09-19T11:20:56.117 に答える
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で

コンボボックス1

<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"/>
于 2012-09-19T23:14:44.290 に答える