Какой «правильный» способ получить ссылку на объект ленты?

StackOverflow https://stackoverflow.com/questions/4610938

  •  25-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Спасибо!

Это было полезно?

Решение

Гораздо более простым способом - создать глобальную статическую переменную где-то (например, в этой рабочей книге).

public static Ribbon ribbonref;

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

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

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

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

Другие советы

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

Globals.Ribbons.MyRibbon.MyObject.Text = "test";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top