【发布时间】:2016-10-11 08:36:08
【问题描述】:
如何动态添加 Combo Box 项?
我有一个组合框,我将在 OnChange 回调事件期间调用 API。将项目加载到组合框时遇到问题
public void OnChange(Office.IRibbonControl control, string text)
{
var result = GETMembersList("https://restcountries.eu/rest/v1/all");
var members = from member in result
select member;
foreach (var member in members)
{
dsMember mem = new dsMember();
mem.Id = member["numericCode"].ToString();
mem.Name = member["name"].ToString();
RibbonDropDownItem item = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();
item.Label = mem.Name;
**cmbMembers.Items.Add(item);** ?? //problem here, cant access the combo box
}
功能区.xml
<?xml version="1.0" encoding="UTF-8"?>
<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="tabTest" label="TEST">
<group id="grpTest">
<comboBox id="cmbMembers" label="Users" showImage="false"
onChange="OnChange"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
【问题讨论】:
-
你试过
Globals.Ribbons.Ribbon1.cmbMembers.Items.Add(item);吗? -
@haindl ya 我试过了,但 Ribbon1 为空。
-
从 Office 的角度来看,没有 XML 就无法创建功能区。无论您使用 VSTO、COM 插件还是 VBA,您总是需要这个 Ribbon.xml。 VSTO 色带设计器实际上只是一种使此过程更容易的方法。从 XML 的角度来看,有两种方法可以让组合框充满项目。如果项目是静态的并且不会更改,那么您只需在
<comboBox>上使用getItemCount/getItemID/getItemLabel,但如果项目在运行时发生更改,则您必须使用<dynamicMenu>而不是<comboBox>并构建 @ 987654328@ 在getContent内。
标签: c# outlook vsto add-in outlook-addin