【问题标题】:VSTO Ribbon Combo Box Add items DynamicallyVSTO Ribbon Combo Box 动态添加项目
【发布时间】:2016-10-11 08:36:08
【问题描述】:

如何动态添加 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
        }

功能区.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>

【问题讨论】:

  • 你试过Globals.Ribbons.Ribbon1.cmbMembers.Items.Add(item);吗?
  • @haindl ya 我试过了,但 Ribbon1 为空。
  • 从 Office 的角度来看,没有 XML 就无法创建功能区。无论您使用 VSTO、COM 插件还是 VBA,您总是需要这个 Ribbon.xml。 VSTO 色带设计器实际上只是一种使此过程更容易的方法。从 XML 的角度来看,有两种方法可以让组合框充满项目。如果项目是静态的并且不会更改,那么您只需在 &lt;comboBox&gt; 上使用 getItemCount/getItemID/getItemLabel,但如果项目在运行时发生更改,则您必须使用 &lt;dynamicMenu&gt; 而不是 &lt;comboBox&gt; 并构建 @ 987654328@ 在getContent 内。

标签: c# outlook vsto add-in outlook-addin


【解决方案1】:

试试这个:

 RibbonDropDownItem item = Factory.CreateRibbonDropDownItem();

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 2016-08-19
      相关资源
      最近更新 更多