Qual é a maneira "adequada" de recuperar uma referência a um objeto de fita?
-
25-09-2019 - |
Pergunta
Para um projeto de pasta de trabalho VSTO, existe uma prática recomendada para recuperar uma referência ao objeto Ribbon da classe ThisWorkbook?
Aqui está o que estou fazendo: na minha aula de fita, criei um método público chamado InvalidateControl(string controlID)
. Preciso chamar esse método da classe Thatworkbook, com base em quando um determinado evento da pasta de trabalho dispara. Mas a única maneira de ver "obter" uma referência a esse objeto de fita é fazer isso ...
// This is all in the ThisWorkbook class
Ribbon ribbon;
protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
{
this.ribbon = new Ribbon();
return this.ribbon;
}
... o que parece um pouco fedorento. Quero dizer, eu tenho que substituir CreateRibbonExtensibilityObject()
sem considerar; Tudo o que estou fazendo além disso é manter uma referência local à fita para que eu possa chamar métodos contra ela. Mas não parece certo. Existe outra maneira melhor de obter essa referência na classe Thatworkbook? Ou isso é bastante aceitável?
Obrigado!
Solução
Uma maneira muito mais simples é criar uma variável estática global em algum lugar (por exemplo, no Thisworkbook).
public static Ribbon ribbonref;
Então, no código da classe Ribbon, no manipulador de eventos para o evento de inicialização (acho que o método é chamado Ribbon1_StartUp()
Mas não tenho certeza), defina a variável:
private void Ribbon1_StartUp(object sender, EventArg e)
{
ThisWorkbook.ribbonref = this;
}
(escrito da memória, então pode não estar exatamente certo)
Você pode então usar ribbonref
Para acessar sua instância de fita.
Outras dicas
Por favor, veja isso Msdn página que mostra o uso do objeto Globals:
Globals.Ribbons.MyRibbon.MyObject.Text = "test";