Quelle est la manière « appropriée » pour récupérer une référence à un objet ruban?

StackOverflow https://stackoverflow.com/questions/4610938

  •  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!

Était-ce utile?

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";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top