VSTO: Pourquoi OfficeRibbon.Context est-il null?
Question
Je développe mon premier complément Word 2007 et j'ai ajouté un OfficeRibbon à mon projet. Dans un gestionnaire de clic sur un bouton, j'aimerais une référence au Word.Document
ou au Word.Application
actuel.
J'essaie d'obtenir une référence via la propriété OfficeRibbon.Context
, qui, selon la documentation, devrait faire référence à l'objet Application
actuel. Cependant, il est toujours null
.
Est-ce que quelqu'un sait soit
a) si je dois faire quelque chose pour que OfficeRibbon.Context
apparaisse correctement rempli?
b) s'il existe un autre moyen d'obtenir une référence à l'application Word ou au document Word actif?
Notes:
-
J'utilise VS2008 SP1
-
Le ruban semble avoir été initialisé correctement: le rendu du ruban est correct dans Word; Je peux faire défiler le débogueur à travers le constructeur et les membres OnLoad; Les gestionnaires de clic de bouton s'exécutent correctement.
Propriété OfficeRibbon.Context
C #
public Object Context {get; ensemble interne; }
Un objet représentant la fenêtre d'inspecteur ou l'instance d'application associée à cet objet OfficeRibbon.
Remarques
Dans Outlook, cette propriété fait référence à la fenêtre Inspecteur dans laquelle cet OfficeRibbon est affiché.
Dans Excel, Word et PowerPoint, cette propriété renvoie l'instance d'application dans laquelle ce OfficeRibbon est affiché.
La solution
J'ai également rencontré ce problème lors de la création d'un complément Excel 2007 à l'aide de VS2008 SP1. La solution de contournement que j'ai utilisée consistait à stocker l'application dans une propriété internal statique
dans la classe AddIn principale, puis à la référencer dans le gestionnaire d'événements de mon ruban:
public partial class ThisAddIn
{
internal static Application Context { get; private set; }
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Context = Application;
}
...
}
public partial class MyRibbon : OfficeRibbon
{
private void button1_Click(object sender, RibbonControlEventArgs e)
{
DoStuffWithApplication(ThisAddIn.Context);
}
...
}
Autres conseils
Obtenez-le de:
Globals.ThisAddIn.Application
Bien que je ne sache pas grand chose des modifications apportées au modèle objet-mot d'Office 2007, voici mon explication à l'aide de la connaissance VBA.
L'application est un objet disponible globalement. En outre, Application.ActiveDocument devrait vous permettre de gérer le document actuel.
Spéculation: comment essayez-vous d'ajouter le ruban?