2011-04-13 80 views
9

所以我必须在内容的丝带,可以被用来同时改变一个下拉菜单。 Outlook还乐意让我'添加'或'插入'项目,只要我不添加超过1项。添加项目RibbonDropDown在运行时

如果我尝试,我会被告知,该指数超出范围,而不是扩大上限为我。

我觉得,如果我将它插入代码的设计部分的集合,它会正常工作,但设计师代码只运行一次,除非我处置色带并重新创建它。

关于我如何能得到这个工作

回答

0

一般来说任何的想法,VSTO要你完整地描述你需要一个时间的UI元素,你问他们的第一次(通过GetCustomUI)。

我碰到类似probs与VSTO前,关于它周围的唯一合理的方法,我发现是预填充(通过设计)所有你可能需要的元素(让我们说10个项目在下拉列表)。

然后,编程隐藏或显示这些项目,并更新其标题和其他属性在必要时,而你的插件运行。

这样一来,你从来没有动态添加或删除任何东西。

+0

我从来没有想过这样,谢谢drventure! – CodeMinion 2011-04-19 22:02:38

+0

没有问题。这有点怪异和骇人听闻,它可以使特定类别的功能有点困难,但据我所知,这是你唯一的选择。 – DarinH 2011-04-21 15:38:14

+2

如果我没有弄错,这个答案显然是错误的。查看其他答案。 – 2012-03-04 16:21:50

0

尝试使用功能区图库。我已经能够用少

foreach (string s in list) 
{ 
    RibbonDropDownItem item = new RibbonDropDownItem();     
    item.Label = s; 
    rGallery.Items.Add(item);     
} 

其中rGallery是RibbonGallery在运行时对其进行修改。

+0

我不认为有必要将RibbonGallery替换为DropDown - 您的方法与DropDown一样可行。请参阅sadanand sudeer的回答。 – 2012-03-04 16:23:16

30

试试这个。这应该适合你。

RibbonDropDownItem item 
     = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem(); 
item.Label = "First Name"; 
this.cbRecent.Items.Add(item); 
+2

这应该是被接受的答案。 – dotNET 2016-02-02 03:55:15

+0

你好....如果下拉列表中包含一个按钮,则在按钮之前添加项目....以任何方式在按钮之后添加项目? – jstuardo 2017-11-14 17:57:51

6

尝试以下操作:

RibbonDropDownItem item = this.Factory.CreateRibbonDropDownItem(); 
item.Label = "Text"; 
combo.Items.Add(item); 
+1

答案看起来不错,但你能提供一些描述吗?这将是非常有用的! – 2012-11-21 14:37:38

1

jeds,你的做法不符合 “新” 的工作。你必须使用“Globals.Factory.GetRibbonFactory()。CreateRibbonDropDownItem()”。否则,你是对的,你的方法在RibbonGallery中效果很好。

这种方法也有一个下拉的伟大工程。我仍然经常冲突使用哪一个...

但是,除了那些2个对象(下拉和RibbonGallery),我相信drventure是正确的。您只需提前提取对象并根据需要使用它们。

您也可以使用XML功能区,但这会产生更大的麻烦(至少在我的用例中)。