获取 VSTO 中 Ribbon ComboBox 控件的选中项的标签 (VB.Net)

Get selected item's tag of Ribbon ComboBox control in VSTO (VB.Net)

我有一个代码可以列出 2010 年 Excel SQL 所有员工的时间条目(上班时间、下班时间、评论、员工姓名)信息,使用 Excel 添加-在项目中。在这里,我想向前一步列出 ComboBox 控件中所选员工的时间输入信息(分别在标签和标签属性中保存员工姓名和员工 ID),使用 Excel 放置在 Excel 功能区中加载项。

在这里,我无法从我添加的 ComboBox 中获取所选员工的标签 (Id)。

请任何人帮助我解决这个问题。

谢谢

嗯,这有点棘手但可行。首先,您只能通过 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; }
    }

使用如下值启动对象(为了更容易理解,我将所有内容都放在功能区中class,但这绝对是错误的方法

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 中 class) (有关回调列表,请参阅 here

    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 应用程序中看到下拉列表,在本例中的加载项选项卡下具有树值,当您 select 一个时,您应该获得员工的姓名和 ID。