2011-04-13 23 views
9

Tengo un menú desplegable en una cinta con contenido que se puede cambiar mientras se usa. Outlook también se complace en permitirme agregar o insertar elementos, siempre que no agregue más de 1 artículo.Agregar elementos a RibbonDropDown en tiempo de ejecución

Si lo intento, me dirán que el índice está fuera de límites en lugar de expandir los límites superiores para mí.

Me parece que si lo inserto en la colección en la parte de diseñador del código, funcionará bien, pero el código de diseñador solo se ejecuta una vez, a menos que Descarte la cinta y la vuelva a crear.

Cualquier ideas sobre cómo puedo conseguir este funcionamiento

Respuesta

0

En términos generales, VSTO quiere que para describir por completo los elementos de interfaz de usuario que necesita una vez, la primera vez que se le pregunta por ellos (a través de GetCustomUI).

Me encontré con problemas similares antes con vsto y sobre la única forma razonable que encontré fue rellenar (a través del diseñador) todos los elementos que pueda necesitar (así que digamos 10 elementos en su menú desplegable lista).

Luego, programe OCULTAR o MOSTRAR esos elementos y actualizar sus leyendas y otras propiedades según sea necesario mientras se ejecuta su complemento.

De esta manera, nunca tendrá que agregar o quitar dinámicamente nada.

+0

Nunca pensé en eso, gracias drventure! – CodeMinion

+0

No hay problema Es un poco raro y hackish, y puede hacer que una cierta clase de características sea un poco difícil, pero hasta donde yo sé, esa es la única opción que tienes. – DarinH

+2

Si no me equivoco, esta respuesta es simplemente falsa. Ver las otras respuestas –

0

Intente utilizar una galería de cintas. He sido capaz de modificarlos durante el tiempo de ejecución con tan poco como

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

donde rGallery es un RibbonGallery.

+0

No veo la necesidad de sustituir RibbonGallery por DropDown; su método funciona igual de bien con DropDown. Ver la respuesta de sadanand sudeer. –

30

Pruebe esto. Esto debería funcionar para ti.

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

Esta debería ser la respuesta aceptada. – dotNET

+0

Hola .... si el menú desplegable contiene un botón, los elementos se agregan antes del botón .... ¿hay alguna manera de agregar los elementos después de los botones? – jstuardo

6

intente lo siguiente:

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

La respuesta parece buena, pero ¿puedes darnos un poco de descripción? ¡Sería muy útil! –

1

jeds, su enfoque no funciona con el "nuevo". Debe usar "Globals.Factory.GetRibbonFactory(). CreateRibbonDropDownItem()". De lo contrario, tienes razón y tu enfoque funciona muy bien con RibbonGallery.

Este enfoque también funciona muy bien con DropDown. Todavía estoy a menudo en conflicto sobre cuál usar ...

Sin embargo, aparte de esos 2 objetos (Dropdown y RibbonGallery), creo que drventure es correcto. Simplemente tiene que cerrar los objetos antes de tiempo y usarlos según sea necesario.

También puede usar XML Ribbon, pero eso crea un conjunto de dolores de cabeza aún mayor (al menos para mis casos de uso).

Cuestiones relacionadas