ВСТО:Почему OfficeRibbon.Контекст равен нулю?
Вопрос
Я разрабатываю свой первый аддон Word 2007, и я добавил OfficeRibbon в свой проект.В обработчике нажатия кнопки я хотел бы получить ссылку либо на текущий Word.Document
или Word.Application
.
Я пытаюсь получить ссылку через OfficeRibbon.Context
свойство, которое, как указано в документации, должно относиться к текущему Application
объект.Тем не менее, это всегда null
.
Кто-нибудь тоже знает
а) если есть что-то, что мне нужно сделать, чтобы OfficeRibbon.Context
кажется, правильно заполнено?
б) если есть какой-то другой способ, которым я могу получить ссылку на приложение Word или активный документ Word?
Примечания:
Я использую VS2008 SP1
Лента выглядит так, как будто она нормально инициализировалась:Лента корректно отображается в Word;Я могу запустить отладчик как через конструктор, так и через элементы OnLoad;Обработчики нажатия кнопок выполняются правильно.
OfficeRibbon.Свойство контекста
C#
public Object Context { get; internal set; }
Объект, представляющий окно инспектора или экземпляр приложения, связанный с этим объектом OfficeRibbon.
Замечания
В Outlook это свойство ссылается на окно инспектора, в котором отображается этот OfficeRibbon.
В Excel, Word и PowerPoint это свойство возвращает экземпляр приложения, в котором отображается этот OfficeRibbon.
Решение
Я также столкнулся с этой проблемой при создании надстройки Excel 2007 с использованием VS2008 SP1.Обходной путь, который я использовал, заключался в том, чтобы сохранить приложение в internal static
свойство в основном классе AddIn, а затем ссылаться на него в обработчике событий в моей ленте:
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);
}
...
}
Другие советы
Получить это от:
Globals.ThisAddIn.Application
Хотя я мало что знаю об изменениях в объектной модели Office 2007 word, вот мое объяснение с использованием знаний VBA.
Приложение - это глобально доступный объект.Кроме того, Application.ActiveDocument должен предоставить вам дескриптор текущего документа.
Спекулируя:Как вы пытаетесь добавить ленту?