ねえみんな、これを理解するのを手伝ってくれませんか!? リボン XML のコンボボックス コントロールの値をクリアする方法については、まだ調査中です。これまでのところ、適切な解決策を見つけることができませんでした。
私のコンボボックス コントロールは互いにリンクされています。combobox2 は、combobox1 の選択された値に依存するため、combobox1 の選択された値が変更されるたびに、combobox2 のデータ テキストをクリアする必要があります。
VSTO で実際にこれを行ったことはありませんが、VBA コールバックとdropDown
コントロールで同様のことを行いました。以下は私がそれを行う方法です。コールバックのみがVB.NETではなくVBAになります(テストされていません!)
コンボボックスのコールバックを定義します:
とを使用してgetItemCount
、コンボボックスの内容を定義します。最初の内容に基づいて 2 番目のコンボに値を入力する方法を知るには、ある種の状態を使用する必要があります。getItemID
getItemLabel
最初のコンボでコールバックを使用して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)
私は今それを手に入れました、それはドロップダウンコントロールとほとんど同じです。
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"/>