Pregunta

Para un proyecto de libro de trabajo VSTO, ¿hay una mejor práctica para recuperar una referencia al objeto de cinta de la clase de Thereworkbook?

Esto es lo que estoy haciendo: en mi clase de cinta, creé un método público llamado InvalidateControl(string controlID). Necesito llamar a ese método desde la clase de Tworkbook en función de cuando se dispara un determinado evento de nivel de libro de trabajo. Pero la única forma en que puedo ver "obtener" una referencia a ese objeto de cinta es hacer esto ...

    // This is all in the ThisWorkbook class
    Ribbon ribbon;
    protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        this.ribbon = new Ribbon();
        return this.ribbon;
    }

... que parece un poco maloliente. Quiero decir, tengo que anular CreateRibbonExtensibilityObject() sin importar; Todo lo que estoy haciendo más allá de eso es mantener una referencia local a la cinta para que pueda llamar a los métodos en su contra. Pero no se siente bien. ¿Hay otra, mejor manera de obtener esa referencia en la clase de Therworkbook? ¿O es esto bastante aceptable?

¡Gracias!

¿Fue útil?

Solución

Una forma mucho más simple es crear una variable estática global en algún lugar (por ejemplo, en este libro de trabajo).

public static Ribbon ribbonref;

Luego, en el código de la clase de cinta, en el controlador de eventos para el evento de inicialización (creo que se llama el método Ribbon1_StartUp() Pero no estoy seguro), establezca la variable:

private void Ribbon1_StartUp(object sender, EventArg e)
{
    ThisWorkbook.ribbonref = this;
}

(escrito de memoria, por lo que puede no ser exactamente correcto)

Entonces puedes usar ribbonref Para acceder a su instancia de cinta.

Otros consejos

Por favor vea esto MSDN Página que muestra el uso del objeto Globals:

Globals.Ribbons.MyRibbon.MyObject.Text = "test";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top