Sdílet prostřednictvím


Správa zámku dokumentu

Spuštěná tabulka dokumentů (RDT) udržuje počet otevřených dokumentů a všechny zámky úprav, které mají. Zámek úprav můžete umístit na dokument v RDT, když je programově upravován na pozadí, aniž by uživatel viděl otevřený dokument v okně dokumentu. Tyto funkce často používají návrháři, kteří upravují více souborů prostřednictvím grafického uživatelského rozhraní.

Scénáře zámků dokumentů

Soubor "a" má závislost na souboru "b"

Představte si situaci, kdy implementujete standardní editor "A" pro typ souboru "a" a každý soubor typu "a" má odkaz na soubor typu "b" (nebo na tom závisí). Standardní editor "B" existuje pro soubory typu "b". Když editor "A" otevře soubor "a", načte odkaz na odpovídající soubor "b". Soubor "b" se nezobrazuje, ale editor "A" ho může upravit. Editor "A" získá odkaz na data dokumentu souboru "b" z FindAndLockDocument metody a také udržuje zámek úprav souboru "b". Po úpravě souboru "b" editoru "A" můžete dekrementovat počet uzamčení úprav na souboru "b" voláním UnlockDocument metody. Tento krok můžete vynechat, pokud jste volali metodu FindAndLockDocument s parametrem dwRDTLockType nastaveným na _VSRDTFLAGS. RDT_NoLock.

Soubor "b" je otevřen jiným editorem.

V případě, že soubor "b" je již otevřen editorem "B", když se editor "A" pokusí otevřít, existují dva samostatné scénáře pro zpracování:

  • Pokud je soubor "b" otevřen v kompatibilním editoru, musíte mít editor "A" zaregistrovat zámek úprav dokumentu na souboru "b" pomocí RegisterDocumentLockHolder této metody. Jakmile editor "A" dokončí úpravu souboru "b", zrušte registraci zámku úprav dokumentu pomocí UnregisterDocumentLockHolder metody.

  • Pokud je soubor "b" otevřen nekompatibilním způsobem, můžete buď nechat pokus o otevření souboru "b" editorem "A", nebo můžete nechat zobrazení přidružené k editoru "A" částečně otevřít a zobrazit příslušnou chybovou zprávu. Chybová zpráva by měla dát uživateli pokyn, aby zavřel soubor "b" v nekompatibilním editoru a pak soubor "a" znovu otevřete pomocí editoru "A". Můžete také implementovat metodu QueryCloseRunningDocument sady Visual Studio SDK, která uživatele vyzve k zavření souboru "b", který je otevřen v nekompatibilním editoru. Pokud uživatel soubor "b" zavře, bude otevření souboru "a" v editoru "A" pokračovat normálně.

Další aspekty zámku úprav dokumentu

Pokud je editor "A" jediným editorem, který má zámek úprav dokumentu na souboru "b", než kdyby editor "B" obsahuje také zámek úprav dokumentu na souboru "b". V sadě Visual Studio je návrhář tříd příkladem vizuálního návrháře, který neudržuje zámek úprav přidruženého souboru kódu. To znamená, že pokud má uživatel otevřený diagram tříd v návrhovém zobrazení a přidružený soubor kódu otevřený současně, a pokud uživatel upraví soubor kódu, ale neuloží změny, změny se také ztratí v souboru diagramu tříd (.cd). Pokud má Návrhář tříd jediný zámek úprav dokumentu v souboru kódu, uživatel nebude požádán o uložení změn při zavření souboru kódu. Integrované vývojové prostředí požádá uživatele, aby změny uložil až po zavření Návrháře tříd. Uložené změny se projeví v obou souborech. Pokud návrhář tříd i editor souborů kódu uložily zámek úprav dokumentu v souboru kódu, zobrazí se uživateli výzva k uložení při zavření souboru kódu nebo formuláře. V tomto okamžiku se uložené změny projeví ve formuláři i v souboru kódu. Další informace odiagramch

Všimněte si, že pokud potřebujete umístit zámek úprav do dokumentu pro jiný než editor, musíte implementovat IVsDocumentLockHolder rozhraní.

Návrhář uživatelského rozhraní, který upravuje soubory kódu programově, provádí změny více než jednoho souboru. V takových případech SaveItemsViaDlg metoda zpracovává ukládání jednoho nebo více dokumentů pomocí dialogového okna Chcete uložit změny v následujících položkách?