Quelle est la manière « appropriée » pour récupérer une référence à un objet ruban?
-
25-09-2019 - |
Question
Pour un projet de classeur VSTO, est-il une meilleure pratique pour la récupération d'une référence à l'objet de ruban de la classe ThisWorkbook?
Voici ce que je fais: Dans ma classe de ruban, j'ai créé une méthode publique appelée InvalidateControl(string controlID)
. Je dois appeler cette méthode de la classe ThisWorkbook basée sur lorsqu'un certain événement se déclenche au niveau du classeur. Mais la seule façon que je peux voir pour « obtenir » une référence à cet objet de ruban est de le faire ...
// This is all in the ThisWorkbook class
Ribbon ribbon;
protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
{
this.ribbon = new Ribbon();
return this.ribbon;
}
... qui semble un peu nauséabond. Je veux dire, je dois passer outre CreateRibbonExtensibilityObject()
peu importe; tout ce que je fais au-delà de ce qui est le maintien d'une référence locale au ruban afin que je puisse appeler des méthodes contre. Mais il ne se sent pas bien. Y at-il une autre, une meilleure façon d'obtenir cette référence dans la classe ThisWorkbook? Ou est-ce assez acceptable?
Merci!
La solution
Une façon beaucoup plus simple est de créer une variable statique globale quelque part (par exemple dans ThisWorkbook).
public static Ribbon ribbonref;
Ensuite, dans le code de la classe de ruban, dans le gestionnaire d'événements pour l'événement d'initialisation (je pense que la méthode est appelée Ribbon1_StartUp()
mais je ne suis pas sûr), la variable:
private void Ribbon1_StartUp(object sender, EventArg e)
{
ThisWorkbook.ribbonref = this;
}
(écrit de mémoire donc peut-être pas exactement à droite)
Vous pouvez ensuite utiliser ribbonref
pour accéder à votre instance de ruban.
Autres conseils
S'il vous plaît voir cette la page MSDN qui montre l'utilisation du objet globals:
Globals.Ribbons.MyRibbon.MyObject.Text = "test";