Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uruchomiona tabela dokumentów (RDT) przechowuje liczbę otwartych dokumentów i wszystkie blokady edycji, które mają. Blokadę edycji dokumentu można umieścić w dokumencie RDT, gdy jest on edytowany programowo w tle bez wyświetlania otwartego dokumentu w oknie dokumentu. Ta funkcja jest często używana przez projektantów, którzy modyfikują wiele plików za pomocą graficznego interfejsu użytkownika.
Scenariusze uchwytu blokady dokumentu
Plik "a" ma zależność od pliku "b"
Rozważmy sytuację, w której zaimplementowano standardowy edytor "A" dla typu pliku "a", a każdy plik typu "a" ma odwołanie do (lub zależności od) pliku typu "b". Istnieje standardowy edytor "B" dla plików typu "b". Gdy edytor "A" otwiera plik "a", pobiera odwołanie do odpowiedniego pliku "b". Plik "b" nie jest wyświetlany, ale edytor "A" może go modyfikować. Edytor "A" uzyskuje odwołanie do danych dokumentu pliku "b" z FindAndLockDocument metody , a także utrzymuje blokadę edycji w pliku "b". Po zakończeniu modyfikowania pliku "b" przez edytora "A" można dekrementować liczbę blokad edycji w pliku "b", wywołując metodę UnlockDocument. Możesz pominąć ten krok, jeśli wywołaliśmy metodę FindAndLockDocument z parametrem dwRDTLockType ustawionym na _VSRDTFLAGS. RDT_NoLock.
Plik "b" jest otwierany przez inny edytor
W przypadku, gdy plik "b" jest już otwarty przez edytor "B", gdy edytor "A" próbuje go otworzyć, istnieją dwa oddzielne scenariusze do obsługi:
Jeśli plik "b" jest otwarty w zgodnym edytorze, edytor "A" musi zarejestrować blokadę edycji dokumentu na pliku "b" przy użyciu metody RegisterDocumentLockHolder. Po zakończeniu modyfikacji pliku "b" przez edytora wyrejestruj blokadę edycji dokumentu, korzystając z metody UnregisterDocumentLockHolder.
Jeśli plik "b" jest otwarty w niekompatybilny sposób, możesz albo pozwolić, aby próba otwarcia pliku "b" przez edytor "A" nie powiodła się, albo można zezwolić na częściowe otwarcie widoku skojarzonego z edytorem "A" i wyświetlenie odpowiedniego komunikatu o błędzie. Komunikat o błędzie powinien poinstruować użytkownika, aby zamknął plik "b" w niezgodnym edytorze, a następnie ponownie otwórz plik "a" przy użyciu edytora "A". Można również zaimplementować metodę QueryCloseRunningDocument zestawu SDK programu Visual Studio, aby monitować użytkownika o zamknięcie pliku "b", który jest otwarty w niezgodnym edytorze. Jeśli użytkownik zamknie plik "b", otwarcie pliku "a" w edytorze "A" będzie kontynuowane normalnie.
Dodatkowe uwagi dotyczące blokad edytowania dokumentów
Jeśli edytor "A" jest jedynym edytorem, który ma blokadę edycji dokumentu na pliku "b", otrzymasz inne zachowanie w porównaniu z sytuacją, gdy edytor "B" także posiada blokadę edycji na pliku "b". W programie Visual Studio projektant klas jest przykładem projektanta wizualnego, który nie przechowuje blokady edycji skojarzonego pliku kodu. Oznacza to, że jeśli użytkownik ma otwarty diagram klasy w widoku projektu i skojarzony plik kodu jest otwarty jednocześnie, a jeśli użytkownik modyfikuje plik kodu, ale nie zapisuje zmian, zmiany zostaną również utracone w pliku diagramu klas (.cd). Jeśli projektant klas ma jedyną blokadę edycji dokumentu w pliku kodu, użytkownik nie zostanie poproszony o zapisanie zmian podczas zamykania pliku kodu. Środowisko IDE prosi użytkownika o zapisanie zmian dopiero po zamknięciu projektanta klas. Zapisane zmiany są odzwierciedlane w obu plikach. Jeśli zarówno projektant klas , jak i edytor plików kodu zablokowały edycję dokumentu w pliku kodu, użytkownik zostanie poproszony o zapisanie podczas zamykania pliku kodu lub formularza. W tym momencie zapisane zmiany są odzwierciedlane zarówno w formularzu, jak i w pliku kodu. Aby uzyskać więcej informacji na temat diagramów klas, zobacz Praca z diagramami klas (Projektant klas).
Należy pamiętać, że jeśli musisz umieścić blokadę edycji w dokumencie dla osoby niebędącej edytorem, musisz zaimplementować interfejs IVsDocumentLockHolder.
Wiele razy projektant interfejsu użytkownika, który programowo modyfikuje pliki kodu, wprowadza zmiany w więcej niż jednym pliku. W takich przypadkach metoda SaveItemsViaDlg obsługuje zapisywanie jednego lub więcej dokumentów w oknie dialogowym "Czy chcesz zapisać zmiany w następujących elementach?"