He usado VB .Net en Visual Studio para crear mi primer complemento VSTO para Excel. Como es común, tuve dificultades para envolver mi cabeza alrededor de las devoluciones de llamada de la cinta. Los puse a trabajar, pero tengo una pregunta para la que no puedo encontrar una respuesta:

¿Existen funciones de devolución de llamada de cinta para obtener directamente el estado de un control ...?

Por ejemplo, para comparar cintas con clases, la mayoría de los controles "seleccionables" activan la devolución de llamada onAction cuando se hace clic, y estos pueden considerarse eventos. Los controles de varios estados, como la casilla de verificación y el botón de alternancia, tienen la devolución de llamada getPressed para establecer su estado actual, y estos pueden considerarse como los métodos de Conjunto de propiedades. Del mismo modo, los controles basados en texto tienen las devoluciones de llamada getText.

Pero, ¿existen equivalentes a los métodos de obtención de propiedades? Siguiendo la naturaleza invertida de las devoluciones de llamada, parece probable que se trate de devoluciones de llamada que comiencen con set, como setPressed o setText ... pero aún no he encontrado ninguna.

¿No existen, debido a esa naturaleza invertida donde get es en realidad set, y viceversa ...?

0
spinjector 3 ene. 2020 a las 00:39

2 respuestas

La mejor respuesta

VSTO Ribbon Designer "envuelve" Ribbon XML para que el desarrollador pueda trabajar con los controles básicos de una manera similar al uso de los controles de formularios Windows Forms. Esto significa que las propiedades (atributos en el XML) se pueden leer y escribir en tiempo de ejecución, en lugar de mediante devoluciones de llamada. Además, los objetos de control Ribbon exponen eventos en lugar de que el desarrollador necesite codificar devoluciones de llamadas de eventos.

(Tenga en cuenta que para algo más complejo, es necesario utilizar Ribbon XML. El Diseñador realmente solo funciona para controles básicos, agregados desde la Caja de herramientas).

La documentación es aquí. A continuación se muestra un pequeño ejemplo para demostrar.

Por ejemplo, se ha agregado un control DropDown a un grupo de la cinta de opciones, llamado DropDown1. Se puede encontrar en el archivo de código Ribbon1.Designer.cs donde se declara como

internal Microsoft.Office.Tools.Ribbon.RibbonDropDown dropDown1;

E implementado con

// dropDown1
// 
ribbonDropDownItem1.Label = "Item0";
ribbonDropDownItem2.Label = "Item1";
ribbonDropDownItem3.Label = "Item2";
ribbonDropDownItem4.Label = "Item3";
this.dropDown1.Items.Add(ribbonDropDownItem1);
this.dropDown1.Items.Add(ribbonDropDownItem2);
this.dropDown1.Items.Add(ribbonDropDownItem3);
this.dropDown1.Items.Add(ribbonDropDownItem4);
this.dropDown1.Label = "dropDown1";
this.dropDown1.Name = "dropDown1";
this.dropDown1.SelectionChanged += new System.EventHandler<Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs>(this.dropDown1_SelectionChanged);

Tenga en cuenta que la información en este archivo es generada por las "Herramientas" y no debe ser editada por el Desarrollador. Puede ser, pero no hay garantía de que las "Herramientas" no hagan cambios negando cualquier edición. Pero a partir de él se puede ver lo que se ejecuta cuando se carga la cinta de opciones (configuración de atributos y carga de la lista) y la creación de un evento (que sería una devolución de llamada en XML de la cinta de opciones). Todas las propiedades y configuraciones mostradas se generan utilizando la ventana Properties provista en el Diseñador, igual que para los controles de Windows Form.

Luego se agregó un botón a un grupo de la cinta de opciones (cualquier pestaña, cualquier grupo) en el proyecto. Haga doble clic para abrir la página de códigos en Ribbon1.cs con el controlador predeterminado Click y se agregó un código auxiliar. El desarrollador escribe el código entre llaves.

Observe cómo este código usa propiedades , que se leen (this.dropDown1.SelectedItem.Label) y se configuran (ddItem.Label). El código muestra un mensaje con el título del elemento seleccionado actualmente, crea un nuevo elemento, configura el título y una sugerencia de pantalla, lo agrega al menú desplegable y luego selecciona ese elemento.

private void btnSetGetDD1_Click(object sender, RibbonControlEventArgs e)
{
    MessageBox.Show(this.dropDown1.SelectedItem.Label);
    RibbonDropDownItem ddItem = new RibbonDropDownItem();
    ddItem.Label = "new item three added";
    ddItem.ScreenTip = "next test";
    this.dropDown1.Items.Add(ddItem);
    this.dropDown1.SelectedItemIndex = this.dropDown1.Items.Count - 1;
}
1
Cindy Meister 6 ene. 2020 a las 12:46

No hay devoluciones de llamada para obtener los valores de estas propiedades, ya que usted es quien establece los diversos valores, debe ser el que almacene los valores internamente y, por lo tanto, los exponga tanto para la cinta como para su código.

1
Dmitry Streblechenko 2 ene. 2020 a las 21:47