2016-10-11 60 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"; 
    } 
}