Dela via


Stöd för flera dokumentvyer

Du kan ange mer än en vy av ett dokument genom att skapa separata dokumentdata och dokumentvisningsobjekt för redigeringsprogrammet. Några fall där ytterligare en dokumentvy skulle vara användbar är:

  • Stöd för nytt fönster: Du vill att redigeraren ska tillhandahålla två eller flera vyer av samma typ, så att en användare som redan har ett fönster öppet i redigeraren kan öppna ett nytt fönster genom att välja kommandot Nytt fönstermenyn Fönster .

  • Stöd för formulär- och kodvy: Du vill att redigeringsprogrammet ska tillhandahålla vyer av olika typer. Visual Basic tillhandahåller till exempel både en formulärvy och en kodvy.

    Mer information om detta finns i proceduren CreateEditorInstance i filen EditorFactory.cs i det anpassade redigeringsprojektet som skapats av Visual Studio-paketmallen. Mer information om det här projektet finns i Genomgång: Skapa en anpassad redigerare.

Synkronisera vyer

När du implementerar flera vyer ansvarar dokumentdataobjektet för att hålla alla vyer synkroniserade med data. Du kan använda gränssnitten för händelsehantering för VsTextBuffer att synkronisera flera vyer med data.

Om du inte använder VsTextBuffer objektet för att synkronisera flera vyer måste du implementera ditt eget händelsesystem för att hantera ändringar som gjorts i dokumentdataobjektet. Du kan använda olika detaljnivåer för att hålla flera vyer uppdaterade. Med en inställning med maximal kornighet uppdateras de andra vyerna omedelbart när du skriver i en vy. Med minsta kornighet uppdateras inte andra vyer förrän de har aktiverats.

Avgöra om dokumentdata redan är öppna

Den dokumenttabell som körs (RDT) i den integrerade utvecklingsmiljön (IDE) hjälper till att spåra om data för ett dokument redan är öppna, enligt följande diagram.

DocDataView-grafisk

Flera vyer

Som standard finns varje vy (dokumentvyobjekt) i sin egen fönsterram (IVsWindowFrame). Som redan nämnts kan dokumentdata dock visas i flera vyer. För att aktivera detta kontrollerar Visual Studio RDT för att avgöra om dokumentet i fråga redan är öppet i ett redigeringsprogram. När IDE anropar CreateEditorInstance för att skapa redigeraren anger ett icke-NULL-värde som returneras i parametern punkDocDataExisting att dokumentet redan är öppet i en annan redigerare. Mer information om hur RDT fungerar finns i Köra dokumenttabell.

I din IVsEditorFactory-implementering undersöker du dataobjektet för dokument som returneras i punkDocDataExisting för att avgöra om dokumentet är lämpligt för din redigerare. (Till exempel ska endast HTML-data visas av en HTML-redigerare.) Om det är lämpligt bör redigeringsfabriken tillhandahålla en andra vy för data. Om parametern punkDocDataExisting inte NULLär är det möjligt antingen att dokumentdataobjektet är öppet i en annan redigerare eller, mer troligt, att dokumentdata redan är öppna i en annan vy med samma redigerare. Om dokumentdata är öppna i en annan redigerare som din redigerarfabrik inte stöder kan Visual Studio inte öppna din redigerarfabrik. Mer information finns i Så här kopplar du vyer till dokumentdata.