Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die laufende Dokumenttabelle (RDT) verwaltet eine Anzahl geöffneter Dokumente und alle Bearbeitungssperren, die sie haben. Sie können eine Bearbeitungssperre für ein Dokument im RDT platzieren, wenn es programmgesteuert im Hintergrund bearbeitet wird, ohne dass dem Benutzer in einem Dokumentfenster ein geöffnetes Dokument angezeigt wird. Diese Funktionalität wird häufig von Designern verwendet, die mehrere Dateien über eine grafische Benutzeroberfläche ändern.
Szenarien für Dokumentsperrhalter
Datei "a" hat eine Abhängigkeit von Datei "b"
Berücksichtigen Sie eine Situation, in der Sie einen Standard-Editor "A" für den Dateityp "a" implementieren, und jede Datei vom Typ "a" hat einen Verweis auf (oder Abhängigkeit von) einer Datei vom Typ "b". Ein Standard-Editor "B" ist für Dateien vom Typ "b" vorhanden. Wenn der Editor "A" die Datei "a" öffnet, wird der Verweis auf die entsprechende Datei "b" abgerufen. Die Datei "b" wird nicht angezeigt, aber der Editor "A" kann sie ändern. Editor "A" ruft einen Verweis auf die Dokumentdaten der Datei "b" aus der FindAndLockDocument Methode ab und verwaltet auch eine Bearbeitungssperre für Die Datei "b". Nachdem der Editor "A" die Datei "b" geändert hat, können Sie die Bearbeitungssperranzahl für die Datei "b" durch Aufrufen der UnlockDocument-Methode verringern. Sie können diesen Schritt weglassen, wenn Sie die FindAndLockDocument Methode aufgerufen haben, wobei der Parameter dwRDTLockType auf _VSRDTFLAGS festgelegt ist . RDT_NoLock.
Datei "b" wird von einem anderen Editor geöffnet
Wenn die Datei "b" bereits vom Editor "B" geöffnet wird, wenn editor "A" versucht, sie zu öffnen, gibt es zwei separate Szenarien, die behandelt werden müssen:
Wenn die Datei "b" in einem kompatiblen Editor geöffnet ist, muss der Editor "A" eine Bearbeitungssperre für die Datei "b" mithilfe der Methode RegisterDocumentLockHolder registrieren. Nachdem der Editor "A" die Datei "b" geändert hat, heben Sie die Registrierung der Dokumentbearbeitungssperre mit der UnregisterDocumentLockHolder Methode auf.
Wenn die Datei "b" inkompatibel geöffnet ist, können Sie entweder zulassen, dass die versuchte Öffnung der Datei "b" durch Editor "A" fehlschlägt, oder Sie können die Ansicht, die dem Editor "A" zugeordnet ist, teilweise öffnen und eine entsprechende Fehlermeldung anzeigen lassen. Die Fehlermeldung sollte den Benutzer anweisen, die Datei "b" im inkompatiblen Editor zu schließen und dann die Datei "a" mit dem Editor "A" erneut zu öffnen. Sie können auch die Visual Studio SDK-Methode QueryCloseRunningDocument implementieren, um den Benutzer aufzufordern, die Datei "b" zu schließen, die im inkompatiblen Editor geöffnet ist. Wenn der Benutzer die Datei "b" schließt, wird das Öffnen der Datei "a" im Editor "A" normal fortgesetzt.
Zusätzliche Überlegungen zur Dokumentbearbeitungssperre
Sie erhalten ein anderes Verhalten, wenn Editor "A" der einzige Editor ist, der über eine Dokumentbearbeitungssperre für Die Datei "b" verfügt, als wenn Editor "B" auch eine Dokumentbearbeitungssperre für Die Datei "b" enthält. In Visual Studio ist Class Designer ein Beispiel für einen visuellen Designer, der keine Bearbeitungssperre für die zugeordnete Codedatei enthält. Wenn der Benutzer ein Klassendiagramm in der Entwurfsansicht geöffnet hat und die zugehörige Codedatei gleichzeitig geöffnet ist und der Benutzer die Codedatei ändert, die Änderungen jedoch nicht speichert, gehen die Änderungen auch an der Klassendiagrammdatei (CD) verloren. Wenn der Klassen-Designer über die einzige Dokumentbearbeitungssperre in der Codedatei verfügt, wird der Benutzer nicht aufgefordert, die Änderungen beim Schließen der Codedatei zu speichern. Die IDE fordert den Benutzer auf, die Änderungen nur zu speichern, nachdem der Benutzer den Klassen-Designer geschlossen hat. Die gespeicherten Änderungen werden in beiden Dateien wiedergegeben. Wenn sowohl der Klassen-Designer als auch der Codedatei-Editor Bearbeitungssperren für die Codedatei bestehen haben, wird der Benutzer aufgefordert, beim Schließen entweder der Codedatei oder des Formulars zu speichern. Zu diesem Zeitpunkt werden die gespeicherten Änderungen sowohl in dem Formular als auch in der Codedatei wiedergegeben. Weitere Informationen zu Klassendiagrammen finden Sie unter Arbeiten mit Klassendiagrammen (Klassen-Designer).
Wenn Sie eine Bearbeitungssperre für ein Dokument für einen Nicht-Editor platzieren müssen, müssen Sie die IVsDocumentLockHolder Schnittstelle implementieren.
Oft nimmt ein Benutzeroberflächen-Designer, der Codedateien programmgesteuert ändert, Änderungen an mehr als einer Datei vor. In solchen Fällen behandelt die SaveItemsViaDlg Methode das Speichern eines oder mehrerer Dokumente mithilfe des Dialogfelds "Möchten Sie Änderungen an den folgenden Elementen speichern?" .