2011-04-13 87 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功能區,但這會產生更大的麻煩(至少在我的用例中)。