Porady: modyfikowanie standardowego polecenia menu w języku specyficznym dla domeny
Można zmienić to zachowanie niektórych standardowych poleceń, które są automatycznie zdefiniowany w swojej DSL.Na przykład można zmodyfikować Wytnij tak, aby nie obejmuje poufne informacje.W tym celu przesłonięcia metody w klasie zestaw poleceń.Te klas zdefiniowanych w pliku CommandSet.cs w projekcie DslPackage i pochodzących z CommandSet.
Podsumowanie, aby zmodyfikować polecenia:
Odnajdywanie poleceń, jakich można zmodyfikować.
Utwórz częściowe deklaracji klasy zestawu odpowiednie polecenie.
Zastąpienie metody ProcessOnStatus i ProcessOnMenu dla polecenia.
W tym temacie wyjaśniono tej procedury.
[!UWAGA]
Jeśli chcesz utworzyć własny poleceń menu, zobacz Porady: dodawanie polecenia do menu skrótów.
Jakie polecenia można zmodyfikować?
Do wykrywania co poleceń można zmodyfikować
W DslPackage otwarty projekt GeneratedCode\CommandSet.cs.W Eksploratorze rozwiązań można znaleźć tego pliku C# jako zależne CommandSet.tt.
Znajdź klas w tym pliku, których nazwy kończą się z "CommandSet", na przykład Language1CommandSet i Language1ClipboardCommandSet.
W każdej klasy zestawu polecenia, wpisz "override" spację.Technologia IntelliSense wyświetla listę metody, które można zastąpić.Każde z nich parą metody, których nazwy zaczynają się "ProcessOnStatus"i"ProcessOnMenu".
Zwróć uwagę, które polecenia ustawienia klas zawiera polecenia, które chcesz zmodyfikować.
Zamknij plik bez zapisywania wprowadzonych zmian.
[!UWAGA]
Zwykle nie należy edytować pliki, które zostały wygenerowane.Wszelkie zmiany zostaną utracone pliki są generowane, gdy następnym razem.
Rozszerzenie klasy zestawu odpowiednie polecenie
Utwórz nowy plik zawierający częściowe deklaracji klasy zestaw poleceń.
Rozszerzenie klasy polecenia Set
W Eksploratorze rozwiązań w projekcie DslPackage Otwórz GeneratedCode folder, a następnie Szukaj w obszarze CommandSet.tt i otwórz jego wygenerowany plik CommandSet.cs.Należy zauważyć, przestrzeń nazw i nazwę klasy pierwszy, zdefiniowany istnieje.Na przykład może zostać wyświetlony:
namespace Company.Language1
{ ... internal partial class Language1CommandSet : ...
W DslPackage, Utwórz folder o nazwie kodu niestandardowego.W tym folderze, należy utworzyć nowy plik klasy o nazwie CommandSet.cs.
W nowym pliku zapisu częściowe oświadczenie z tej samej przestrzeni nazw i nazwę jako wygenerowana klasa częściowe.Na przykład:
using System; using System.Collections.Generic; using System.ComponentModel.Design; namespace Company.Language1 /* Make sure this is correct */ { internal partial class Language1CommandSet { ...
Uwaga Jeżeli plik szablonu klasy został użyty do utworzenia nowego pliku, należy usunąć zarówno przestrzeń nazw i nazwę klasy.
Zastąpienie metody polecenia
Większość poleceń ma dwie metody skojarzone: metodę o nazwie, takich jak ProcessOnStatus...Określa, czy polecenie powinno być widoczne i włączone.Jest wywoływana, gdy użytkownik kliknie prawym przyciskiem myszy diagram i należy wykonać szybkie i nie wprowadzisz zmian.ProcessOnMenu...jest wywoływane, gdy użytkownik kliknie przycisk polecenia i należy wykonać funkcji polecenia.Można zastąpić jedną lub obie te metody.
Aby zmienić, gdy polecenie pojawi się w menu
Zastąp ProcessOnStatus...Metoda.Tej metody należy ustawić Visible i włączyć właściwości jej parametru MenuCommand.Zazwyczaj polecenie wygląda na to.CurrentSelection w celu określenia, czy polecenie ma zastosowanie do wybranych elementów, a także może wyglądać na ich właściwości w celu określenia, czy polecenie można zastosować w jego bieżącym stanie.
Jako wskazówkę należy określić wartość właściwości Visible przez jakie elementy są zaznaczone.Właściwość włączone, która określa, czy polecenie pojawi się czarny lub szary w menu, należy są zależne od bieżącego stanu zaznaczenia.
Poniższy przykład wyłącza usuwania elementu menu, gdy użytkownik wybrał więcej niż jeden kształt.
[!UWAGA]
Ta metoda nie ma wpływu na, czy polecenie jest dostępny za pośrednictwem naciśnięcie klawisza.Na przykład wyłączenie usuwania elementu menu nie uniemożliwia polecenie wywoływana za pomocą klawisz Delete.
/// <summary>
/// Called when user right-clicks on the diagram or clicks the Edit menu.
/// </summary>
/// <param name="command">Set Visible and Enabled properties.</param>
protected override void ProcessOnStatusDeleteCommand (MenuCommand command)
{
// Default settings from the base method.
base.ProcessOnStatusDeleteCommand(command);
if (this.CurrentSelection.Count > 1)
{
// If user has selected more than one item, Delete is greyed out.
command.Enabled = false;
}
}
Dobrze jest dotyczyć wszystkich przypadków i ustawień, które nie jest niezbędne, aby najpierw wywołać metodę podstawową.
Metoda ProcessOnStatus nie należy utworzyć, usuń lub zaktualizuj elementów w magazynie.
Aby zmienić to zachowanie polecenia
Zastąp ProcessOnMenu...Metoda.Poniższy przykład uniemożliwia usunięcie więcej niż jeden element jednocześnie, nawet przy użyciu klawisz Delete.
/// <summary>
/// Called when user presses Delete key
/// or clicks the Delete command on a menu.
/// </summary>
protected override void ProcessOnMenuDeleteCommand()
{
// Allow users to delete only one thing at a time.
if (this.CurrentSelection.Count <= 1)
{
base.ProcessOnMenuDeleteCommand();
}
}
Jeśli kod sprawia, że zmiany w magazynie, takie jak tworzenie, usuwanie lub aktualizowanie elementów lub łączy, należy je w transakcji.Aby uzyskać więcej informacji, zobacz Porady: modyfikowanie standardowego polecenia menu w języku specyficznym dla domeny.
Pisanie kodu z metod
Następujące fragmenty są często przydatne w przypadku następujących metod:
this.CurrentSelection.Kształt będący użytkownik kliknął prawym przyciskiem myszy zawsze znajduje się na tej liście kształty i łączniki.Gdy użytkownik kliknie pustą część diagramu, diagramu jest jedynym członkiem listy.
this.IsDiagramSelected() - trueKiedy użytkownik kliknie pustą część diagramu.
this.IsCurrentDiagramEmpty()
this.IsSingleSelection()-użytkownik nie zaznaczono wiele kształtów
this.SingleSelection-kształt lub diagram, z którym użytkownik kliknął prawym przyciskiem myszy
shape.ModelElement as MyLanguageElement-element modelu reprezentowany przez kształt.
Aby uzyskać więcej informacji, dotyczące sposobu nawigacji z elementu i tworzenie obiektów i łączy, zobacz Nawigowanie i aktualizowanie modelu w kodzie programu.
Zobacz też
Zadania
Porady: dodawanie polecenia do menu skrótów
[redirect] — Wskazówki: pobieranie informacji z wybranego łącza
Informacje
Koncepcje
Jak dodać elementy interfejsu użytkownika VSPackages IDE
Inne zasoby
Pisanie kodu pod kątem dostosowywania języka specyficznego dla domeny
Visual Studio polecenia Tabela (.Pliki Vsct)
VMSDK — Przykładowe diagramy obwód. Dokładne dostosowanie DSL