Udostępnij za pośrednictwem


Jak: Modyfikowanie standardowego polecenia Menu w języku specyficzne dla domeny

Można zmodyfikować zachowanie niektórych standardowych poleceń, które są automatycznie definiowane w linii DSL.Na przykład, można zmodyfikować Cut tak, aby nie obejmuje informacji poufnych.Aby to zrobić, można zastąpić metody w klasie zestaw poleceń.Klasy te są zdefiniowane w pliku CommandSet.cs w projekcie DslPackage i pochodne CommandSet.

Podsumowanie, aby zmodyfikować polecenie:

  1. Odkryj, co polecenia, można zmodyfikować.

  2. Tworzenie częściowa deklaracja klasy odpowiednie polecenie set.

  3. Zastąpić metody ProcessOnStatus i ProcessOnMenu dla polecenia.

W tym temacie wyjaśniono tej procedury.

[!UWAGA]

Jeśli chcesz utworzyć swoje własne polecenia menu, zobacz Jak: Dodawanie polecenia do Menu skrótów.

Jakie polecenia można modyfikować?

Wykrywanie poleceń można, jakich można modyfikować

  1. W DslPackage projektu, a następnie kliknij polecenie Otwórz GeneratedCode\CommandSet.cs.Ten plik języka C# można znaleźć w oknie Solution Explorer zależna od CommandSet.tt.

  2. Znajdź klas w tym pliku, których nazwy kończą się "CommandSet", na przykład Language1CommandSet i Language1ClipboardCommandSet.

  3. W każdej klasie zestaw poleceń, wpisz "override" spację.Technologia IntelliSense wyświetli listę metod, które można zastąpić.Każde polecenie ma pary metod, których nazwy "ProcessOnStatus"i"ProcessOnMenu".

  4. Uwaga, które polecenia set klas zawiera polecenie, które chcesz zmodyfikować.

  5. Zamknij plik bez zapisywania wprowadzonych zmian.

    [!UWAGA]

    Zwykle nie należy edytować pliki, które zostały wygenerowane.Wszelkie zmiany zostaną utracone przy następnym są generowane pliki.

Rozszerzenie klasy odpowiednie polecenie set

Utwórz nowy plik, który zawiera częściowa deklaracja klasy zestaw poleceń.

Aby rozszerzyć klasę polecenia Set

  1. W oknie Solution Explorer, w programie project DslPackage Otwórz GeneratedCode folder, a następnie Szukaj pod CommandSet.tt i otwórz jego wygenerowany plik CommandSet.cs.Uwaga obszaru nazw i nazwę pierwszej klasy, która jest zdefiniowane.Być może na przykład, zobacz:

    namespace Company.Language1

    { ... internal partial class Language1CommandSet : ...

  2. W DslPackage, utwórz folder o nazwie kod niestandardowy.W tym folderze, należy utworzyć nowy plik klasy o nazwie CommandSet.cs.

  3. W nowym pliku zapisu częściowa deklaracja, która ma tę samą nazwę, jak wygenerowany częściowej klasy i obszaru nazw.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śli plik szablonu klasy są używane do tworzenia nowego pliku, należy poprawić zarówno obszaru nazw i nazwy klasy.

Zastąpić metody polecenia

Większość poleceń posiada dwie metody skojarzone: jak metody o nazwie ProcessOnStatus...Określa, czy polecenie powinny być widoczne i włączone.Go jest wywoływana w każdym przypadku, gdy użytkownik kliknie prawym przyciskiem myszy diagram i powinny wykonać szybko i wprowadzane żadne zmiany.ProcessOnMenu...jest wywoływane, gdy użytkownik kliknie polecenie i należy wykonać funkcji polecenia.Można zastąpić jedną lub obie z tych metod.

Dd820672.collapse_all(pl-pl,VS.110).gifAby zmienić polecenie pojawi się menu

Zastąpić ProcessOnStatus...Metoda.Tej metody należy ustawić widoczne i włączone właściwości jego parametr MenuCommand.Zazwyczaj polecenie wygląda na to.CurrentSelection, aby ustalić, czy polecenie stosuje się do wybranych elementów i również przyjrzeć się ich właściwości, aby określić, czy polecenia mogą być stosowane w ich bieżącym stanie.

Jako ogólne wskazówki należy określić właściwość Visible, przez jakie elementy są zaznaczone.Właściwość Enabled Określa, czy polecenie pojawi się czarny lub szary w menu, powinien zależeć od bieżącego stanu zaznaczenia.

Następujący przykład wyłącza Usuń element menu, gdy użytkownik zaznaczy więcej niż jeden kształt.

[!UWAGA]

Metoda ta nie wpływa na czy polecenie jest dostępne poprzez naciśnięcie klawisza.Na przykład wyłączenie Usuń element menu nie zapobiega polecenia wywoływane za pomocą klawisza 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;
  }
}

Jest dobrą praktyką, walkę z przypadków i ustawienia, które nie jest istotny, aby najpierw wywołać metodę podstawową.

Metoda ProcessOnStatus nie powinny utworzyć, usunąć lub zaktualizować elementy w magazynie.

Dd820672.collapse_all(pl-pl,VS.110).gifAby zmienić to zachowanie, polecenia

Zastąpić ProcessOnMenu...Metoda.Poniższy przykład uniemożliwia użytkownikowi usunięcie więcej niż jeden element naraz, nawet przy użyciu klawisza 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 wprowadza zmiany do magazynu, takich jak tworzenie, usuwanie lub aktualizowanie elementów lub łącza, należy to zrobić wewnątrz transakcji.Aby uzyskać więcej informacji, zobacz Jak: Modyfikowanie standardowego polecenia Menu w języku specyficzne dla domeny.

Dd820672.collapse_all(pl-pl,VS.110).gifPisanie kodu metody

Następujące fragmenty są często bardzo użyteczne w ramach tych metod:

  • this.CurrentSelection.Użytkownik kliknął prawym przyciskiem myszy kształtu zawsze znajduje się na tej liście, kształtów i łączników.Jeśli użytkownik kliknie na pustą część diagramu, Diagram jest jedynym członkiem listy.

  • this.IsDiagramSelected() - trueJeśli użytkownik kliknie pusty część diagramu.

  • this.IsCurrentDiagramEmpty()

  • this.IsSingleSelection()-użytkownik nie zaznaczono wiele kształtów

  • this.SingleSelection-kształtu lub diagram, który użytkownik kliknął prawym przyciskiem myszy

  • shape.ModelElement as MyLanguageElement-element modelu reprezentowany przez kształt.

Aby uzyskać więcej informacji na temat sposobu nawigowania element po elemencie oraz o sposobie tworzenia obiektów i łączy, zobacz Przeglądanie i aktualizowanie modelu w kod programu.

Zobacz też

Zadania

Jak: Dodawanie polecenia do Menu skrótów

[przekierowanie] Instruktaż: Uzyskiwanie informacji z wybranego łącza

Informacje

MenuCommand

Koncepcje

Jak dodać elementy interfejsu użytkownika VSPackages IDE

Odwołanie schematu VSCT XML

Inne zasoby

Pisanie kodu, aby dostosować język specyficzne dla domeny

Visual Studio polecenia Tabela (.Pliki Vsct)

VMSDK – diagramy przykładowe. Dokładne dostosowanie DSL

Przykładowy kod: diagramy