Вопрос

Я разрабатываю свой первый аддон 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.ThisDocument.[some item]

Ссылка на MSDN

Получить это от:

Globals.ThisAddIn.Application

Хотя я мало что знаю об изменениях в объектной модели Office 2007 word, вот мое объяснение с использованием знаний VBA.

Приложение - это глобально доступный объект.Кроме того, Application.ActiveDocument должен предоставить вам дескриптор текущего документа.

Спекулируя:Как вы пытаетесь добавить ленту?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top