practices - generate documentation c#
VSTO: ¿Por qué OfficeRibbon.Context es nulo? (4)
Estoy desarrollando mi primer complemento de Word 2007 y he agregado una OfficeRibbon a mi proyecto. En un controlador de botón y clic, me gustaría hacer una referencia al Word.Document
o Word.Application
actual.
Estoy tratando de obtener una referencia a través de la propiedad OfficeRibbon.Context
, que según la documentación debe referirse al objeto de Application
actual. Sin embargo, siempre es null
.
¿Alguien sabe ya sea
a) si hay algo que deba hacer para que OfficeRibbon.Context
aparezca correctamente OfficeRibbon.Context
?
b) si hay alguna otra forma en que pueda obtener una referencia a la aplicación de Word o documento de Word activo?
Notas:
Estoy usando VS2008 SP1
La cinta parece que se ha inicializado correctamente: la cinta se representa correctamente en Word; Puedo pasar el depurador a través del constructor y los miembros de OnLoad; Los manejadores de clic de botón se ejecutan correctamente.
Aquí está la ayuda en línea para esta propiedad ;
Propiedad OfficeRibbon.Context
C#
public Object Context { get; internal set; }
Un Objeto que representa la ventana del Inspector o la instancia de la aplicación que está asociada con este objeto OfficeRibbon.
Observaciones
En Outlook, esta propiedad hace referencia a la ventana del Inspector en la que se muestra este OfficeRibbon.
En Excel, Word y PowerPoint, esta propiedad devuelve la instancia de la aplicación en la que se muestra este OfficeRibbon.
Aunque no sé mucho sobre los cambios en el modelo de objetos de Word de Office 2007, aquí está mi explicación utilizando el conocimiento de VBA.
La aplicación es un objeto disponible en todo el mundo. Además, Application.ActiveDocument debe hacer que maneje el documento actual.
Especulando: ¿Cómo estás tratando de agregar la cinta?
También encontré este problema al crear un Complemento de Excel 2007 utilizando VS2008 SP1. La solución alternativa que utilicé fue almacenar la aplicación en una propiedad internal static
en la clase principal AddIn y luego hacer referencia a ella en el controlador de eventos en mi cinta:
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);
}
...
}
Obtenlo de:
Globals.ThisAddIn.Application