2016-10-11 35 views
1

如何动态添加组合框项目?VSTO Ribbon 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 
     } 

Ribbon.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> 
+0

你试过了吗?Globals.Ribbons.Ribbon1.cmbMembers.Items.Add(item);'? – haindl

+0

@haindl亚我试过了,但Ribbon1为空。 –

+1

从Office的角度来看,如果没有XML,就没有办法创建Ribbons。无论你使用VSTO,COM插件还是VBA,你总是需要这个Ribbon.xml。 VSTO ribbon设计师实际上只是使这个过程更简单的一种方法。从XML的角度来看,有两种方法可以获得装满项目的组合框。如果项目是静态的并且不改变,那么你只需在''上使用'getItemCount/getItemID/getItemLabel',但是如果项目在运行期间改变了,那么你必须使用''而不是''并在'getContent'内建立'

'。 – haindl

回答

0

VISTO有一个问题,我也尝试添加从代码中的多个项目背后却出事了。 但是,现有项目可以动态修改。 尝试在Ribbon1_Load事件中进行编辑。

public partial class Ribbon1 
{ 
    private void Ribbon1_Load(object sender, RibbonUIEventArgs e) 
    { 
     this.comboBox1.Items[0].Label = "new Lable"; 
    } 
}