Какой «правильный» способ получить ссылку на объект ленты?
-
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";