2016-10-11 1 views
1

Wie fügen Sie die Combo Box Elemente dynamisch hinzu?VSTO Ribbon Combo Box Artikel hinzufügen Dynamisch

Ich habe eine Combo-Box, in der ich die API während des OnChange Call Back-Ereignisses aufrufen werde. Haben Sie ein Problem in die Elemente in der Combo-Box

Laden
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

Haben Sie 'Globals.Ribbons.Ribbon1.cmbMembers.Items.Add (item);'? – haindl

+0

@haindl ya ich versuchte, aber Ribbon1 ist null. –

+1

Aus der Sicht von Office gibt es keine Möglichkeit, Bänder ohne XML zu erstellen. Unabhängig davon, ob Sie VSTO, ein COM-Add-In oder VBA verwenden, benötigen Sie immer diese Ribbon.xml. Der VSTO Ribbon Designer ist wirklich nur eine Möglichkeit, diesen Prozess zu vereinfachen. Aus der XML-Perspektive gibt es zwei Möglichkeiten, die Combobox mit Elementen zu füllen. Wenn die Elemente statisch sind und sich nicht ändern, dann verwenden Sie einfach 'getItemCount/getItemID/getItemLabel' auf dem '', aber wenn sich die Elemente während der Laufzeit ändern, müssen Sie '' anstelle von '' verwenden und baue '

' in 'getContent'. – haindl

Antwort

0

VISTO ein Problem aufgetreten ist, habe ich versucht zu mehrere Artikel von Code hinzufügen hinter aber etwas schief gelaufen ist. Aber vorhandene Elemente können dynamisch geändert werden. Versuchen Sie, das Ribbon1_Load-Ereignis zu bearbeiten.

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