C# 在VSTO加载项Word中将项目添加到组合框或库中

C# 在VSTO加载项Word中将项目添加到组合框或库中,c#,drop-down-menu,combobox,ms-word,vsto,C#,Drop Down Menu,Combobox,Ms Word,Vsto,我需要从一个位置获取文件列表,并将它们的名称(如项目)放入功能区中的组合框、图库或下拉列表(列表更好) 但我不明白如何将数据导入Dropdownlist。 我现在有这个: using System.IO; using System.Data; using System; using Microsoft.Office.Tools.Ribbon; private void ComboBox1_TextChanged(object sender, RibbonControlEventArgs e)

我需要从一个位置获取文件列表,并将它们的名称(如项目)放入功能区中的组合框、图库或下拉列表(列表更好)

但我不明白如何将数据导入Dropdownlist。 我现在有这个:

using System.IO;
using System.Data;
using System;
using Microsoft.Office.Tools.Ribbon;
private void ComboBox1_TextChanged(object sender, RibbonControlEventArgs e)
        {
            DirectoryInfo d = new DirectoryInfo(@"C:\install\CSharp");//Getting files info
            FileInfo[] Files = d.GetFiles("*.dot*"); //Getting dot or dotm
            string str = "";
            var filtered = Files.Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden)); //Getting out the hidden files
            foreach (FileInfo file in filtered)
            {
                str = file.Name;

                File.AppendAllText(@"C:\install\CSharp\tulemus.txt", $"File name is: {str}" + Environment.NewLine);  //but I want to put them in to my Combobox

          //this.comboBox1.Items.Add(("How to put filtered info here instead of a text file"));
            }
        }
Visual Studio错误为:

严重性代码说明项目文件行抑制状态 错误CS1503参数1:无法从“字符串”转换为 “Microsoft.Office.Tools.Ribbon.RibbonDropDownItem”TemplateCopy C:\Users****\source\repos\TemplateCopy\Ribbon1.cs 39处于活动状态


对于下拉列表,请从Visual Studio的“工具/Office功能区控件”窗格插入
下拉列表
控件。在“属性”窗格中为其指定名称和标签。出于本讨论的目的,已将名为
ddList
的下拉控件添加到功能区选项卡中

下一个决定是,何时填充列表

  • 如果列表应该是静态的,请转到属性中的
    按钮
    条目,然后单击它以获得一个可以键入静态列表的界面
  • 要在创建功能区(加载VSTO项目)时填充列表,请在功能区的
    Load
    事件中写入代码
  • 要在VSTO项目的会话期间动态更改列表,请在需要时运行基本相同的代码(例如,单击按钮)
填充列表的示例代码。为每个列表条目创建一个
RibbonDropDownItem
。分配属性,然后向下拉控件追加(
Add
)条目。代码是相同的,无论是在
Load
事件中触发,还是通过下拉菜单本身的事件触发,还是通过按钮触发。(注意:如果按钮的事件代码不在功能区中,则需要引用功能区类。)

功能区设计器中编程控件的背景

使用Ribbon Designer时,VSTO抽象出Office Fluent UI,并提供比直接使用Ribbon XML更“直观”的开发界面。因此,VSTO不编写回调,而是创建可以类似于Windows窗体控件使用的对象


这些可以通过Ribbon类访问,默认情况下VSTO将创建(例如):Ribbbon1.cs要为控件的默认事件生成代码存根,请双击该控件。要为其他事件生成代码存根,请在“属性”窗格中切换到“事件”页面,然后双击。

网站上的规则有问题。你能用这个链接把这个问题简化成一个问题,而不是两个问题吗?我想你用的是丝带设计师吧?什么会触发将文件列表加载到列表?你试过什么密码?嘿。是的,使用了Ribbon designer。我想有更新按钮旁边的名单(触发器)。但在按下更新按钮之前,旧列表必须存在(因此,只有在有新文件时,我们才需要更新按钮)。到目前为止,我一直在尝试这个.comboBox1.Items.Add。我在网上找不到合适的。谢谢你的介绍。我最终得到了这个密码。现在它正在工作:RibbonDropDownItem ddItem1=Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();ddItem1.Label=$“{str}”;ddList.Items.Add(ddItem1);我收到COM错误。。。。无法将“System.\u ComObject”类型的COM对象强制转换为接口类型“Microsoft.Office.Core.IRibbonUI”。此操作失败,因为对IID为“{000C03A7-0000-0000-C000-0000000000 46}”的接口的COM组件的QueryInterface调用由于以下错误而失败:库未注册。(来自HRESULT的异常:0x8002801D(类型_E_libnotregisted))。
RibbonDropDownItem ddItem1 = new RibbonDropDownItem();
ddItem1.Label = "Item added at runtime";
ddList.Items.Add(ddItem1);