Лента XML - получить выбранный индекс или идентификатор элемента в элементе управления comboBox - PullRequest
0 голосов
/ 28 февраля 2020

Я работаю над comboBox XML Ленточным управлением, и я схожу с ума, чтобы получить индекс выбранного элемента.

Это код ленты XML с comboBox:

<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
  <tabs>

    <tab id="SearchCustomerTab" insertAfterMso="TabAddIns" label="Cliente" visible="true">
      <group id="SearchCustomerGroup" label="Cliente" autoScale="true">
        <comboBox id="CustomerComboBox" getItemCount="GetItemCountCallback" getItemLabel="GetItemLabelCallback" getItemID="GetItemIDCallback" onChange="OnChangeCallback" />
      </group>
    </tab>
  </tabs>
 </ribbon>
</customUI>

С помощью функции обратного вызова getItemCount и getItemLabel я корректно заполняю che comboBox (oTabCustomersList - список пользовательских классов):

Public Function GetItemCountCallback(ByVal control As Office.IRibbonControl) As Integer
    Return oTabCustomersList.Count

End Function

Public Function GetItemLabelCallback(ByVal control As Office.IRibbonControl, index As Integer) As String
    Return oTabCustomersList(index).NomeCompleto

End Function

С помощью обратного вызова getItemId я устанавливаю индекс каждого элемента в идентификаторе:

Public Function GetItemIDCallback(ByVal control As Office.IRibbonControl, index As Integer) As String
    Return index.ToString

End Function

, но с помощью обратного вызова onChange я могу получить метку элемента, но не идентификатор или выбранный индекс:

Public Sub OnChangeCallback(ByVal control As Office.IRibbonControl, text As String)

    Debug.WriteLine("OnChangeCallback text: " & text) 'text = item label

End Sub

Есть ли способ получить индекс выбранного элемента с помощью элемента управления ComboBox ленты?

Заранее спасибо,

Симона

1 Ответ

1 голос
/ 15 марта 2020

К сожалению, невозможно получить индекс выделения в ленте comboBox ( source )

Когда выбрано значение поля со списком, обратный вызов onChange получает текст. Однако получить индекс выбора невозможно.

Я решил использовать словарь (из String, CustomClass), где строка - это текстовый параметр OnChangeCallback:

Private customClass As CustomClass
Private customDictionary As Dictionary(Of String, CustomClass)

Public Sub Ribbon_Load(ByVal ribbonUI As Office.IRibbonUI)
    Dim customList As List(Of CustomClass)

    customList = FunctionToPopulateMyList()
    customDictionary = customList.ToDictionary(Function(p) p.MyText, Function(p) p)

End Sub

Public Function GetItemLabelCallback(ByVal control As Office.IRibbonControl, index As Integer) As String

        Return oCustomDictionary.ElementAt(index).Value.MyText
End Function

Public Function GetItemCountCallback(ByVal control As Office.IRibbonControl) As Integer

        Return oCustomDictionary.Count

End Function

Public Function GetItemIDCallback(ByVal control As Office.IRibbonControl, index As Integer) As String
    Return "Item" & index.ToString & control.Id

End Function

Public Sub OnChangeCallback(ByVal control As Office.IRibbonControl, text As String)
    If (customDictionary.ContainsKey(text)) Then
        customClass = customDictionary(text)

    End If
End Function
...