Получить тег выбранного элемента элемента управления Ribbon ComboBox в VSTO (VB.Net)

У меня есть код для отображения информации о времени (время, время отсутствия, комментарии, имя сотрудника) для всех сотрудников из SQL в Excel 2010 с использованием проекта надстройки Excel. Здесь я хотел сделать шаг вперед, чтобы перечислить информацию о времени для выбранного сотрудника из элемента управления ComboBox (который содержит имя сотрудника и идентификатор сотрудника в свойствах метки и тега соответственно), поместить на ленту Excel с помощью надстройки Excel.

Здесь мне не удалось получить тег выбранного сотрудника (Id) из ComboBox, который я добавил.

Пожалуйста, помогите мне решить эту проблему.

Спасибо


person Balagurunathan Marimuthu    schedule 01.08.2016    source источник


Ответы (1)


Ну, это немного сложно, но выполнимо. Во-первых, это можно сделать только через Ribbon XML (не через конструктор — по крайней мере, я не знаю об этом)

Я создал очень простой XML

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns">
        <group id="MyGroup"
               label="My Group">
          <dropDown id ="cbTest"
                    label="Test Item"
                    getItemID="GetItemID"
                    getItemLabel="GetItemLabel" 
                    getItemCount="GetItemCount" 
                    onAction="OnAction">
          </dropDown > 
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

Ключевой частью является GetItemCount (вы можете назвать его как хотите). Без этого обратного вызова вы никогда не получите никакого обратного вызова для getItemID или getItemLabel.

Остальное легко, создайте объект, который хранит всю необходимую вам информацию, как здесь

public class Employee
    {
        public Employee(int id, string name)
        {
            this.ID = id;
            this.Name = name;
        }
        public int ID { get; set; }
        public string Name { get; set; }
    }

инициировать объект со значениями, как показано ниже (для удобства я поместил все в класс Ribbon, но это определенно плохой подход)

public class Ribbon1 : Office.IRibbonExtensibility
    {
        private Office.IRibbonUI ribbon;
        private List<Employee> _employees = new List<Employee>();

        public Ribbon1()
        {
            _employees.Add(new Employee(1, "John"));
            _employees.Add(new Employee(2, "Mark"));
            _employees.Add(new Employee(3, "Tom"));
        }
// ... rest of the code here
}

а затем обратные вызовы (все еще внутри класса Ribbon1) (список обратных вызовов см. в здесь)

    public int GetItemCount(Office.IRibbonControl control)
    {
        return _employees.Count;
    }

    public string GetItemID(Office.IRibbonControl control, int index)
    {
        var employee = _employees[index];
        return employee.ID.ToString();
    }

    public string GetItemLabel(Office.IRibbonControl control, int index)
    {
        var employee = _employees[index];
        return employee.Name;
    }

    public void OnAction(Office.IRibbonControl control, string selectedId, int selectedIndex)
    {
        var selected = string.Format("{0} ({1})", _employees[selectedIndex].Name, _employees[selectedIndex].ID);
        System.Windows.Forms.MessageBox.Show(selected);
    }

Затем вы должны увидеть раскрывающийся список в своем приложении Office на вкладке «Надстройки» со значениями дерева в этом примере, и когда вы выберете один, вы должны получить имя и идентификатор сотрудника.

person PetLahev    schedule 02.08.2016
comment
Спасибо за Ваш ответ. Позвольте мне попробовать это. - person Balagurunathan Marimuthu; 03.08.2016