#c# #outlook #vsto #add-in #outlook-addin
#c# #outlook #vsto #надстройка #outlook-добавление
Вопрос:
Как динамически добавлять элементы поля со списком?
У меня есть поле со списком, в котором я буду вызывать API во время события обратного вызова onChange. Возникла проблема при загрузке элементов в поле со списком
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>
Комментарии:
1. Вы пробовали
Globals.Ribbons.Ribbon1.cmbMembers.Items.Add(item);
?2. @haindl ya я пытался, но Ribbon1 равно нулю.
3. С точки зрения Office невозможно создавать ленты без XML. Независимо от того, используете ли вы VSTO, COM-надстройку или VBA, вам всегда нужно это Ribbon.xml . Конструктор ленты VSTO — это просто способ упростить этот процесс. С точки зрения XML есть два способа заполнить поле со списком элементами. Если элементы статичны и не меняются, вы просто используете
getItemCount/getItemID/getItemLabel
on<comboBox>
, но если элементы меняются во время выполнения, тогда вам нужно использовать a<dynamicMenu>
вместо<comboBox>
и построить<menu>
внутриgetContent
.
Ответ №1:
попробуйте это:
RibbonDropDownItem item = Factory.CreateRibbonDropDownItem();
Комментарии:
1. Здесь не сказано, как ссылаться на поле со списком на ленте.
2. @Peter Вопрос касается проблемы при загрузке элементов, а не ссылки. В любом случае, если вы хотите обратиться к самому элементу управления, вы найдете его в офисе объявления методов. Элемент управления IRibbonControl
3. Я думаю, что комментарий Хайндла к вопросу является правильным ответом на вопрос. В вашем ответе указано, как создавать элементы, но не как добавлять их в поле со списком — и я не думаю, что их можно добавить в ленту xml.
4. Хорошо, комментарий Хайнделя тоже хорош, вы можете его выбрать 🙂
Ответ №2:
У VISTO проблема, я тоже пытался добавить несколько элементов из кода, но что-то пошло не так. Но существующие элементы можно изменять динамически. Попробуйте отредактировать в событии Ribbon1_Load.
public partial class Ribbon1
{
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
this.comboBox1.Items[0].Label = "new Lable";
}
}
Комментарии:
1. Это для ленты, созданной с помощью конструктора, а не для ленты xml.