Каков «правильный» способ получить ссылку на объект ленты? - PullRequest
3 голосов
/ 06 января 2011

Для проекта рабочей книги VSTO есть ли лучший способ получения ссылки на объект Ribbon из класса ThisWorkbook?

Вот что я делаю: в своем классе ленты я создал открытый метод с именем InvalidateControl(string controlID). Мне нужно вызывать этот метод из класса ThisWorkbook в зависимости от того, когда срабатывает определенное событие уровня рабочей книги. Но единственный способ «получить» ссылку на этот объект ленты - это сделать ...

    // This is all in the ThisWorkbook class
    Ribbon ribbon;
    protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        this.ribbon = new Ribbon();
        return this.ribbon;
    }

... что кажется немного вонючим. Я имею в виду, я должен переопределить CreateRibbonExtensibilityObject() независимо; все, что я делаю, - это поддерживаю локальную ссылку на ленту, чтобы я мог вызывать методы для нее. Но это не правильно. Есть ли другой, лучший способ получить эту ссылку в классе ThisWorkbook? Или это вполне приемлемо?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 января 2011

Намного проще создать где-нибудь глобальную статическую переменную (например, в ThisWorkbook).

public static Ribbon ribbonref;

Затем в коде класса ленты, в обработчике события для события инициализации (я думаю,метод называется Ribbon1_StartUp(), но я не уверен), установите переменную:

private void Ribbon1_StartUp(object sender, EventArg e)
{
    ThisWorkbook.ribbonref = this;
}

(записано из памяти, поэтому может быть не совсем правильным)

Затем можно использовать ribbonref для доступа к вашему экземпляру ленты.

0 голосов
/ 26 мая 2017

Пожалуйста, посмотрите эту MSDN страницу, которая показывает использование объекта Globals:

Globals.Ribbons.MyRibbon.MyObject.Text = "test";
...