Nun, das ist ein bisschen schwierig, aber machbar. Zuerst kann man tun, dass nur über Ribbon XML (nicht über Designer - zumindest ich nicht darüber wissen)
Ich habe sehr einfache 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>
Der wichtigste Teil ist die GetItemCount (können Sie es benennen, wie Sie wollen) Ohne diesen Rückruf erhalten Sie nie einen Rückruf für die getItemID oder getItemLabel.
Der Rest ist dann einfach, ein Objekt erstellen, die alle Informationen speichern die Sie benötigen, wie hier
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; }
}
das Objekt mit Werten wie unten initiieren (für leichtere folgend ich alle in der Ribbon-Klasse setzen, aber dies ist auf jeden Fall schlechter Ansatz)
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
}
und dann die Rückrufe (noch innerhalb der Ribbon1 Klasse) (für Liste von Callbacks bezieht sich 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);
}
Dann sollten Sie die Dropdown-Liste in Ihrer Office-Anwendung, unter der Registerkarte Add-Ins mit den Baum Werte in diesem Beispiel sehen, und wenn Sie eine auswählen sollten Sie Name und die ID des bekommen Mitarbeiter.
Danke für Ihre Antwort. Lass mich das versuchen. –
Super !! Es funktioniert gut ... Danke @PetLahev. –