Udostępnij za pośrednictwem


Obsługa wielu widoków dokumentu

Możesz udostępnić więcej niż jeden widok dokumentu, tworząc oddzielne dane dokumentu i obiekty widoku dokumentu dla edytora. Niektóre przypadki, w których przydaje się dodatkowy widok dokumentu:

  • Obsługa nowego okna: Chcesz, aby edytor udostępniał co najmniej dwa widoki tego samego typu, aby użytkownik, który ma już otwarte okno w edytorze, mógł otworzyć nowe okno, wybierając polecenie Nowe okno z menu Okno.

  • Obsługa widoku formularzy i kodu: chcesz, aby edytor udostępniał widoki różnych typów. Na przykład program Visual Basic udostępnia zarówno widok formularza, jak i widok kodu.

    Aby uzyskać więcej informacji na ten temat, zobacz procedurę CreateEditorInstance w pliku EditorFactory.cs w projekcie edytora niestandardowego utworzonym przez szablon pakietu programu Visual Studio. Aby uzyskać więcej informacji na temat tego projektu, zobacz Przewodnik: tworzenie edytora niestandardowego.

Synchronizowanie widoków

Podczas implementowania wielu widoków obiekt danych dokumentu jest odpowiedzialny za synchronizowanie wszystkich widoków z danymi. Interfejsy obsługi zdarzeń można używać do VsTextBuffer synchronizowania wielu widoków z danymi.

Jeśli nie używasz VsTextBuffer obiektu do synchronizowania wielu widoków, musisz zaimplementować własny system zdarzeń w celu obsługi zmian wprowadzonych w obiekcie danych dokumentu. Możesz użyć różnych poziomów szczegółowości, aby zapewnić aktualność wielu widoków. Po ustawieniu maksymalnego stopnia szczegółowości podczas wpisywania w jednym widoku inne widoki są natychmiast aktualizowane. W przypadku minimalnego stopnia szczegółowości inne widoki nie są aktualizowane, dopóki nie zostaną aktywowane.

Określanie, czy dane dokumentu są już otwarte

Uruchomiona tabela dokumentów (RDT) w zintegrowanym środowisku projektowym (IDE) ułatwia śledzenie, czy dane dokumentu są już otwarte, jak pokazano na poniższym diagramie.

Grafika DocDataView

Wiele widoków

Domyślnie każdy widok (obiekt widoku dokumentu) jest zawarty we własnej ramce okna (IVsWindowFrame). Jak już wspomniano, dane dokumentu mogą być jednak wyświetlane w wielu widokach. Aby to włączyć, program Visual Studio sprawdza RDT, aby określić, czy dany dokument jest już otwarty w edytorze. Gdy środowisko IDE wywołuje CreateEditorInstance polecenie w celu utworzenia edytora, wartość inna niż NULL zwrócona w parametrze punkDocDataExisting wskazuje, że dokument jest już otwarty w innym edytorze. Aby uzyskać więcej informacji na temat sposobu działania protokołu RDT, zobacz Running Document Table (Uruchamianie tabeli dokumentów).

IVsEditorFactory W implementacji sprawdź obiekt danych dokumentu zwrócony w pliku, punkDocDataExisting aby ustalić, czy dane dokumentu są odpowiednie dla edytora. (Na przykład tylko dane HTML powinny być wyświetlane przez edytor HTML). Jeśli jest to odpowiednie, fabryka edytora powinna udostępnić drugi widok danych. punkDocDataExisting Jeśli parametr nie NULLma wartości , istnieje możliwość, że obiekt danych dokumentu jest otwarty w innym edytorze lub, najprawdopodobniej, że dane dokumentu są już otwarte w innym widoku z tym samym edytorem. Jeśli dane dokumentu są otwarte w innym edytorze, którego fabryka edytora nie obsługuje, program Visual Studio nie może otworzyć fabryki edytora. Aby uzyskać więcej informacji, zobacz How to: Attach Views to Document Data (Instrukcje: dołączanie widoków do danych dokumentu).