Sdílet prostřednictvím


Postupy: Úprava příkazu standardní nabídky v jazyce specifickém pro doménu

Můžete upravit chování některých standardní příkazy, které jsou definovány automaticky ve vaší DSL.Například můžete upravit Vyjmout tak, aby ji vyloučí citlivé informace.Chcete-li to provést, přepíšete metody ve třídě sady příkazu.Tyto třídy jsou definovány v souboru CommandSet.cs v DslPackage projektu a jsou odvozeny od CommandSet.

Shrnutí, chcete-li upravit příkaz:

  1. Zjistit, jaké příkazy, můžete upravit.

  2. Vytvořte částečné deklaraci třídy sady příslušný příkaz.

  3. Přepsání metody ProcessOnStatus a ProcessOnMenu pro příkaz.

Toto téma popisuje tohoto postupu.

[!POZNÁMKA]

Pokud chcete vytvořit vlastní příkazy nabídky, naleznete v části Postupy: Přidání příkazu do místní nabídky.

Jaké příkazy lze upravit?

Chcete-li zjistit jaké příkazy můžete upravit

  1. V DslPackage otevřený projekt GeneratedCode\CommandSet.cs.Tento soubor jazyka C# lze nalézt v Průzkumníku řešení jako dceřiné společnosti CommandSet.tt.

  2. Najít třídy v tomto souboru, jejichž názvy končí "CommandSet", například Language1CommandSet a Language1ClipboardCommandSet.

  3. V každé třídě sady příkazu, zadejte "override", za nímž následuje mezeru.Technologie IntelliSense zobrazí seznam metod, které můžete přepsat.Každý příkaz má dvojici metod, jejichž názvy začínají "ProcessOnStatus"a"ProcessOnMenu".

  4. Všimněte si, jež příkazu nastavena třídy obsahuje příkaz, který chcete upravit.

  5. Zavřete soubor bez uložení úprav.

    [!POZNÁMKA]

    Obvykle byste neměli upravovat soubory, které byly vytvořeny.Jakékoli úpravy budou ztraceny při příštím jsou generovány soubory.

Rozšiřují třídu sady příslušný příkaz

Vytvořte nový soubor, který obsahuje deklaraci částečné třídy sady příkazu.

Příkaz rozšířit nastavení třídy

  1. V Průzkumníku řešení v DslPackage projektu otevřete složku GeneratedCode a ve skupinovém rámečku CommandSet.tt a otevřete její vygenerovaný soubor CommandSet.cs.Poznámka: obor názvů a název třídy první, který je definován existuje.Například můžete uvidět:

    namespace Company.Language1

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

  2. V DslPackage, vytvořte složku s názvem vlastní kód.V této složce, vytvořte nový soubor třídy s názvem CommandSet.cs.

  3. V tomto novém souboru zapište částečná deklarace, který má stejný obor názvů a název jako generovaná třída částečné.Příklad:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.Design;
    namespace Company.Language1 /* Make sure this is correct */
    { internal partial class Language1CommandSet { ...
    

    Poznámka: Pokud šablona souboru třídy jste použili k vytvoření nového souboru, je nutné opravit obor názvů a název třídy.

Přepsání metody příkazu

Většina příkazy mají přidružené dvěma způsoby: metodu s názvem, jako jsou ProcessOnStatus...Určuje, zda příkaz, který má být viditelné a aktivní.Je volána vždy, když uživatel klikne pravým tlačítkem myši na diagram a by měla provést rychle a žádné změny nejsou.ProcessOnMenu...je volána, když uživatel klikne na příkaz a má provést funkce příkazu.Můžete chtít přepsat jeden nebo oba tyto metody.

Chcete-li příkaz, který je zobrazen v nabídce změnit

Přepsání ProcessOnStatus...Metoda.Tato metoda by měli nastavit viditelný a povoleno vlastnosti jeho parametru nabídka – příkaz.Příkaz obvykle vypadá to.CurrentSelection k určení, zda příkaz, který se vztahuje na vybrané elementy a může také vypadat na jejich vlastnosti k určení, zda příkaz, který lze použít v aktuálním stavu.

Jako obecného průvodce je třeba určit vlastnost Visible ve jakými elementy jsou vybrány.Vlastnost povoleno, která určuje, zda příkaz, který se zobrazí černá nebo šedá v nabídce, by měl záviset na aktuální stav výběru.

Následující příklad zakáže položky nabídky odstranit, pokud je uživatel vybral více než jeden tvar.

[!POZNÁMKA]

Tato metoda nemá vliv na tom, zda příkaz, který je k dispozici prostřednictvím stisknutí klávesy.Můžete například zakázat položky nabídky odstranit nebrání příkaz volané prostřednictvím klávesu 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;
  }
}

Je vhodné nejprve volat základní metodu, které se zabývají všech případů a nastavení, se kterými nejste příslušné.

Metoda ProcessOnStatus nesmí vytvořit, odstranit nebo aktualizovat elementů v úložišti.

Chcete-li změnit chování příkazu

Přepsání ProcessOnMenu...Metoda.Následující příklad zabrání uživateli odstranění více než jeden element v čase, dokonce pomocí klávesy 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();
  }
}

Pokud kódu provede změny v úložišti, jako je například vytváření, odstraňování nebo aktualizaci elementy nebo odkazy, je nutné provést v transakci.Další informace naleznete v tématu Postupy: Úprava příkazu standardní nabídky v jazyce specifickém pro doménu.

Psát kód metody

Následující fragmenty jsou často užitečné v rámci těchto metod:

  • this.CurrentSelection.Obrazec, který klepli pravým tlačítkem myši uživatele je vždy zahrnuta v tomto seznamu obrazců a konektory.Pokud uživatel klikne na prázdnou část diagramu, diagramu, je jediným členem v seznamu.

  • this.IsDiagramSelected() - truePokud uživatel klikne na prázdnou část diagramu.

  • this.IsCurrentDiagramEmpty()

  • this.IsSingleSelection()-uživatel nevybírejte více obrazců

  • this.SingleSelection-tvar nebo diagram, který klepli pravým tlačítkem myši uživatele

  • shape.ModelElement as MyLanguageElement-prvek modelu, která je reprezentována tvar.

Další informace o tom, jak přejít z elementu a o tom, jak vytvořit objekty a propojení naleznete v tématu Navigace v modelu a aktualizace modelu v kódu programu.

Viz také

Úkoly

Postupy: Přidání příkazu do místní nabídky

[přesměrovat] Návod: Získání informací z vybraného odkazu

Referenční dokumentace

MenuCommand

Koncepty

Jak přidat prvky uživatelského rozhraní IDE VSPackages

Reference schématu VSCT XML

Další zdroje

Zápis kódu pro úpravu jazyka specifického pro doménu

Tabulka příkazu Visual Studio (.Soubory Vsct)

VMSDK – ukázky okruhů. Rozsáhlá vlastní nastavení DSL

ukázkový kód: okruhů