获取 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。
我有一个代码可以列出 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。