Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den körande dokumenttabellen (RDT) upprätthåller ett antal öppna dokument och eventuella redigeringslås som dokumenten har. Du kan placera ett redigeringslås på ett dokument i RDT när det redigeras programmatiskt i bakgrunden utan att användaren ser ett öppet dokument i ett dokumentfönster. Den här funktionen används ofta av designers som ändrar flera filer via ett grafiskt användargränssnitt.
Scenarier för dokumentlåshållare
Filen "a" har ett beroende av filen "b"
Tänk dig en situation där du implementerar en standardredigerare "A" för filtypen "a", och varje fil av typen "a" har en referens till (eller beroende av) en fil av typen "b". Det finns ett standardredigerare "B" för filer av typen "b". När redigeraren "A" öppnar filen "a" hämtas referensen till motsvarande fil "b". Filen "b" visas inte, men redigeraren "A" kan ändra den. Redigeraren "A" hämtar en referens till dokumentdata för filen "b" från FindAndLockDocument metoden och upprätthåller även ett redigeringslås på filen "b". När redigeraren "A" är klar med att ändra filen "b" kan du minska antalet redigeringslås på filen "b" genom att anropa UnlockDocument metoden. Du kan utelämna det här steget om du hade anropat FindAndLockDocument metoden med parametern dwRDTLockType inställd på _VSRDTFLAGS. RDT_NoLock.
Filen "b" öppnas av en annan redigerare
Om filen "b" redan öppnas av redigeraren "B" när redigeraren "A" försöker öppna den finns det två separata scenarier att hantera:
Om filen "b" är öppen i en kompatibel redigerare måste du ha redigeraren "A" registrera ett dokumentredigeringslås på filen "b" med hjälp av RegisterDocumentLockHolder metoden. När redigeraren "A" är klar med att ändra filen "b" avregistrerar du dokumentredigeringslåset UnregisterDocumentLockHolder med hjälp av metoden .
Om filen "b" är öppen på ett inkompatibelt sätt kan du antingen låta försöket att öppna filen "b" av redigeraren "A" misslyckas, eller så kan du låta vyn som är associerad med redigeraren "A" delvis öppna och visa ett lämpligt felmeddelande. Felmeddelandet bör instruera användaren att stänga filen "b" i den inkompatibla redigeraren och sedan öppna filen "a" igen med redigeraren "A". Du kan också implementera Visual Studio SDK-metoden QueryCloseRunningDocument för att uppmana användaren att stänga filen "b" som är öppen i den inkompatibla redigeraren. Om användaren stänger filen "b" fortsätter öppningen av filen "a" i redigeraren "A" normalt.
Ytterligare överväganden för dokumentredigeringslås
Du får ett annat beteende om redigeraren "A" är den enda redigeraren som har ett dokumentredigeringslås på filen "b" än om redigeraren "B" också har ett dokumentredigeringslås på filen "b". I Visual Studio är Class Designer ett exempel på en visuell designer som inte har ett redigeringslås på den associerade kodfilen. Om användaren har ett klassdiagram öppet i designvyn och den associerade kodfilen öppnas samtidigt, och om användaren ändrar kodfilen men inte sparar ändringarna, går ändringarna också förlorade till klassdiagramfilen (.cd). Om klassdesignern har det enda dokumentredigeringslåset på kodfilen uppmanas användaren inte att spara ändringarna när kodfilen stängs. IDE:t ber användaren att spara ändringarna först när användaren har stängt klassdesignern. De sparade ändringarna återspeglas i båda filerna. Om både klassdesignern och kodfilredigeraren har dokumentredigeringslås på kodfilen uppmanas användaren att spara när antingen kodfilen eller formuläret stängs. Då återspeglas de sparade ändringarna i både formuläret och kodfilen. Mer information om klassdiagram finns i Arbeta med klassdiagram (Klassdesigner).
Observera att om du behöver placera ett redigeringslås på ett dokument för en icke-redigerare måste du implementera IVsDocumentLockHolder gränssnittet.
Många gånger gör en användargränssnittsdesigner som ändrar kodfiler programmatiskt ändringar i mer än en fil. I sådana fall SaveItemsViaDlg hanterar metoden besparingen av ett eller flera dokument med hjälp av dialogrutan Vill du spara ändringar i följande objekt?