VSTO: Почему OfficeRibbon.Context не имеет значения? - PullRequest
3 голосов
/ 31 октября 2008

Я занимаюсь разработкой своего первого надстройки к Word 2007 и добавил OfficeRibbon в свой проект. В обработчике нажатия кнопки я бы хотел указывать ссылку на текущий Word.Document или Word.Application.

Я пытаюсь получить ссылку через свойство OfficeRibbon.Context, которое, согласно документации, должно ссылаться на текущий объект Application. Тем не менее, это всегда null.

Кто-нибудь знает либо

а) если мне нужно что-то сделать, чтобы OfficeRibbon.Context выглядел правильно заполненным?
б) если есть другой способ получить ссылку на приложение Word или активный документ Word?

Примечания:

  • Я использую VS2008 SP1

  • Лента выглядит так, как будто она отлично инициализирована: лента корректно отображается в Word; Я могу пройти отладчик как через конструктор, так и через членов OnLoad; Обработчики нажатия кнопок выполняются правильно.

  • Вот интерактивная справка для этого свойства ;

OfficeRibbon.Context Property

C#
public Object Context { get; internal set; }

Объект, представляющий окно инспектора или экземпляр приложения, связанный с этим объектом OfficeRibbon.

Примечания

В Outlook это свойство ссылается на окно инспектора, в котором отображается этот OfficeRibbon.

В Excel, Word и PowerPoint это свойство возвращает экземпляр приложения, в котором отображается этот OfficeRibbon.

Ответы [ 4 ]

4 голосов
/ 22 мая 2009

Я также столкнулся с этой проблемой при создании надстройки 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);
    }
    ...
}
2 голосов
/ 14 июня 2012

Получить от:

Globals.ThisAddIn.Application

2 голосов
/ 22 мая 2009

Попробуйте ссылаться на документ с помощью:

Globals.ThisDocument.[some item]

Ссылка MSDN

1 голос
/ 02 ноября 2008

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

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

Размышления: как вы пытаетесь добавить ленту?

...