2013-04-17 8 views
6

Zajmuję się opracowywaniem dodatku Word z własną zakładką Wstążka. Większość mojego rzeczywistego kodu jest zawarta w niektórych klasach usług, które zostają zainicjowane w ThisAddIn_Startup i przypisane do właściwości obiektu singleton ThisAddIn. Mam także detektor zdarzeń, który nasłuchuje zdarzeń schowka, które chciałbym wystawić na resztę kodu jako właściwość tego samego obiektu.Własna wstążka jest ładowana przed ThisAddIn_Startup, ale chciałbym zainicjować pewne rzeczy - najlepsze rozwiązanie?

Problem, na który napotykam, polega na tym, że ładowanie zdarzenia mojego Wstążki jest uruchamiane przed zdarzeniem Startup tego obiektuAdAdIn (nawet jeśli obiekt singleton został już zainicjowany i przypisany do Globals.ThisAddIn). W moim module obsługi zdarzeń Wstążka ładowania chciałbym zainstalować program obsługi tego słuchacza, a także skorzystać z jednej z tych usług. Nie mogę, ponieważ w tym momencie wykonywania programu są one zerowe.

Jakie jest najlepsze rozwiązanie tego problemu? Mogę po prostu zrobić wszystkie te statyczne elementy ThisAddIn i zainicjować je w statycznym konstruktorze, ale to wydaje się błędne, a także niszczy cały punkt zdarzenia Startup (lub obiektu singleton).

Dziwnie, początkowo nie miałem tego problemu, gdy moja Wstążka właśnie dodawała swoje komponenty do wbudowanej karty Dodatków - następnie załadowano zdarzenie uruchomione po uruchomieniu.

(Uwaga: Robię wszystko to w Visual Studio 2012 i przy użyciu projektanta Ribbon).

Odpowiedz

5

W tym celu jestem nadrzędne BeginInit metody. Z moich imprez doświadczenie wystąpić maksymalnie w kolejności (wstążka/inicjalizacji pokrewne):

  1. CreateRibbonExtensibilityObject
  2. BeginInit
  3. GetCustomUI
  4. Ribbon_Load
  5. ThisAddIn_Startup
1

mam przetestowane rozwiązanie tinamou, to już nie działa. Ribbon_load rzeczywiście wystąpił po BeginInit, ale w tym kroku wstążka jest naprawiona i tylko do odczytu. Nie ma możliwości dodania przycisków grup ... (możliwe jest jednak modyfikowanie menu dynamicznych).

Myślę, że najlepszym sposobem (stabilnym) jest wstępne ładowanie kilku grup itp. I używanie właściwości kontrolek w celu uzyskania dynamicznej wstęgi.

Zobacz także ten wpis localize VSTO addin according to the language of the office product, wydaje się, że CreateRibbonExtensibilityObject jest uruchamiany losowo razy.

+2

Właściwie nie używam już zaakceptowanej odpowiedzi powyżej. (Jaka jest odpowiednia odpowiedź na to pytanie? Czy powinienem dodać nowy i przenieść akceptację?) To, co robię, to edytować konstruktor w Ribbon.Designer.cs, aby wywołać metodę "ManualInitialize". Ten kod zawiera wszystko, co nie zależy od ThisAddIn_Startup. Następnie dodajemy inną metodę do pliku Ribbon.cs "FinalStartup", który jest wywoływany przez ThisAddIn_Startup, który zawiera wszystko, co * robi *, zależy od ThisAddIn_Startup. –

+0

Myślę, że powinieneś usunąć zaakceptowaną odpowiedź i niech twoje pytanie pozostanie bez odpowiedzi. Może ten ktoś znajdzie lepszy sposób. – Malick

Powiązane problemy