Gestione dei titolari di blocco documento
La tabella dei documenti in esecuzione (RDT) mantiene un conteggio dei documenti aperti e dei blocchi di modifica di cui dispongono. È possibile posizionare un blocco di modifica su un documento in RDT quando viene modificato a livello di codice in background senza che l'utente visualizzi un documento aperto in una finestra di documento. Questa funzionalità viene spesso usata dai progettisti che modificano più file tramite un'interfaccia utente grafica.
Scenari dei titolari di blocco documento
Il file "a" ha una dipendenza dal file "b"
Si consideri una situazione in cui si implementa un editor standard "A" per il tipo di file "a" e ogni file di tipo "a" ha un riferimento a (o dipendenza da) un file di tipo "b". Esiste un editor standard "B" per i file di tipo "b". Quando l'editor "A" apre il file "a" recupera il riferimento al file corrispondente "b". Il file "b" non viene visualizzato, ma l'editor "A" può modificarlo. L'editor "A" ottiene un riferimento ai dati del documento del file "b" dal FindAndLockDocument metodo e mantiene anche un blocco di modifica sul file "b". Dopo che l'editor "A" ha completato la modifica del file "b", è possibile decrementare il conteggio dei blocchi di modifica sul file "b" chiamando il UnlockDocument metodo . È possibile omettere questo passaggio se è stato chiamato il FindAndLockDocument metodo con il parametro dwRDTLockType
impostato su _VSRDTFLAGS. RDT_NoLock.
Il file "b" viene aperto da un editor diverso
Nel caso in cui il file "b" sia già aperto dall'editor "B" quando l'editor "A" tenta di aprirlo, esistono due scenari distinti da gestire:
Se il file "b" è aperto in un editor compatibile, è necessario che l'editor "A" registri un blocco di modifica del documento sul file "b" usando il RegisterDocumentLockHolder metodo . Dopo che l'editor "A" ha completato la modifica del file "b", annullare la registrazione del blocco di modifica del documento usando il UnregisterDocumentLockHolder metodo .
Se il file "b" è aperto in modo incompatibile, è possibile consentire all'apertura tentata di file "b" dall'editor "A" o consentire la visualizzazione associata all'editor "A" parzialmente aperta e visualizzare un messaggio di errore appropriato. Il messaggio di errore deve indicare all'utente di chiudere il file "b" nell'editor incompatibile e quindi riaprire il file "a" usando l'editor "A". È anche possibile implementare il metodo QueryCloseRunningDocument di Visual Studio SDK per richiedere all'utente di chiudere il file "b" aperto nell'editor incompatibile. Se l'utente chiude il file "b", l'apertura del file "a" nell'editor "A" continua normalmente.
Considerazioni aggiuntive sui blocchi di modifica del documento
Si ottiene un comportamento diverso se l'editor "A" è l'unico editor che ha un blocco di modifica del documento sul file "b" di quello che si farebbe se l'editor "B" contiene anche un blocco di modifica del documento sul file "b". In Visual Studio Progettazione classi è un esempio di progettazione visiva che non contiene un blocco di modifica nel file di codice associato. Ovvero, se l'utente ha un diagramma classi aperto nella visualizzazione progettazione e il file di codice associato si aprono contemporaneamente e se l'utente modifica il file di codice ma non salva le modifiche, le modifiche andranno perse anche nel file diagramma classi (.cd). Se Progettazione classi dispone dell'unico blocco di modifica del documento nel file di codice, all'utente non viene chiesto di salvare le modifiche quando si chiude il file di codice. L'IDE chiede all'utente di salvare le modifiche solo dopo che l'utente chiude Progettazione classi. Le modifiche salvate vengono riflesse in entrambi i file. Se progettazione classi e l'editor di file di codice hanno mantenuto blocchi di modifica del documento nel file di codice, all'utente viene richiesto di salvare quando si chiude il file di codice o il modulo. A questo punto le modifiche salvate vengono riflesse sia nel modulo che nel file di codice. Per altre informazioni sui diagrammi classi, vedere Usare diagrammi classi (Progettazione classi).
Si noti che se è necessario inserire un blocco di modifica su un documento per un non editor, è necessario implementare l'interfaccia IVsDocumentLockHolder .
Molte volte una finestra di progettazione dell'interfaccia utente che modifica i file di codice apporta modifiche a più file a livello di codice. In questi casi, il SaveItemsViaDlg metodo gestisce il salvataggio di uno o più documenti tramite la finestra di dialogo Salvare le modifiche apportate agli elementi seguenti?