Jak: změna standardní příkaz v jazyce specifické pro doménu
Můžete změnit chování některých standardních příkazů, které jsou automaticky definovány vaše DSL.Nelze například změnit Vyjmout tak, že vylučuje citlivé informace.Provedete to tak, můžete potlačit metod ve třídě příkaz set.Tyto třídy jsou definovány v souboru CommandSet.cs v DslPackage projektu a jsou odvozeny z CommandSet.
V souhrnu, upravit příkaz:
Zjistit, jaké příkazy lze upravit.
Vytvořit částečné deklaraci třídy odpovídající příkaz set.
Přepsat metody ProcessOnStatus a ProcessOnMenu příkazu.
Toto téma popisuje postup.
[!POZNÁMKA]
Pokud chcete vytvořit vlastní příkazy, viz Jak: přidat příkaz místní nabídky.
Jaké příkazy lze upravit?
Zjistit, jaké příkazy můžete upravit
V DslPackage projekt otevřít GeneratedCode\CommandSet.cs.C# soubor nachází v aplikaci Solution Explorer jako dceřiné společnosti CommandSet.tt.
Hledání tříd v tomto souboru, jejichž názvy končí "CommandSet", například Language1CommandSet a Language1ClipboardCommandSet.
V každé třídě nastavení příkazu, zadejte "override" následované mezerou.Technologie IntelliSense zobrazí seznam metod, které lze přepsat.Každý příkaz má pár metod, jejichž názvy začínají "ProcessOnStatus"a"ProcessOnMenu".
Poznámka, která příkazu tříd obsahuje příkaz, který chcete změnit.
Soubor zavřete bez uložení, budou provedené úpravy.
[!POZNÁMKA]
Normálně byste neměli upravovat soubory, které byly generovány.Veškeré úpravy budou ztraceny při příštím jsou generovány soubory.
Rozšíření třídy odpovídající příkaz set
Vytvořte nový soubor, který obsahuje částečné deklaraci třídy příkazu set.
Rozšíření třídy příkaz Set
V aplikaci Solution Explorer DslPackage projektu otevřete složku GeneratedCode a ve skupinovém rámečku CommandSet.tt a otevřete jeho vygenerovaný soubor CommandSet.cs.Poznámka: obor názvů a název první třídy, která je v ní definována.Může například zobrazit:
namespace Company.Language1
{ ... internal partial class Language1CommandSet : ...
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.
V novém souboru zapište částečné prohlášení, že má stejný obor názvů a název generovaný částečné třídy.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 soubor šablony třídy vytvořit nový soubor, musíte opravit obor názvů a název třídy.
Přepsat příkaz metody
Většina příkazů mají dvě přidružené metody: metodu s názvem, například ProcessOnStatus...Určuje, zda příkaz má být viditelný a povolena.Nazývá vždy, když uživatel klepne pravým tlačítkem myši na diagram a měla provést rychle a žádné změny.ProcessOnMenu...je volána, když uživatel klepne na příkaz a má provádět funkce příkazu.Můžete změnit jednu nebo obě tyto metody.
Změna po příkazu nabídky
Přepsat ProcessOnStatus...Metoda.Tato metoda měla nastavit viditelné a vlastnosti jeho parametr nabídka-příkaz povolen.Příkaz obvykle vypadá na to.CurrentSelection určit, zda příkaz se vztahuje na vybrané prvky a vypadat na jejich vlastnosti k určení, zda příkaz lze použít v aktuálním stavu.
Jako obecné vodítko je třeba určit vlastnost Visible prvky, které jsou vybrány.Vlastnost povoleno, která určuje, zda se zobrazí příkaz černá nebo šedá v nabídce, by měl záviset na aktuální stav výběru.
Následující příklad vypne uživatel vybral více obrazců odstranit položku nabídky.
[!POZNÁMKA]
Tato metoda neovlivňuje, zda příkaz je k dispozici prostřednictvím stisknutí klávesy.Například zakázání položky nabídky odstranit nezabrání příkaz vyvolávané přes 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 metodu základní, zabývat případy a nastavení, které nemáte obavy.
Metoda ProcessOnStatus není by vytvořit, odstranit nebo aktualizovat prvky v úložišti.
Změna chování příkazu
Přepsat ProcessOnMenu...Metoda.Následující příklad zabrání uživateli odstranění více prvků najednou, i 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 váš kód změní úložiště, jako je například vytvoření, odstranění nebo aktualizaci prvky nebo odkazy, musíte tak učinit uvnitř transakce.Další informace naleznete v tématu Jak: změna standardní příkaz v jazyce specifické pro doménu.
Kód metody zápisu
Následující fragmenty jsou často používané v rámci těchto metod:
this.CurrentSelection.Tvar, který klepli pravým tlačítkem myši uživatele vždy zahrnuty v tomto seznamu obrazců a spojnic.Pokud uživatel klepne na prázdnou část diagramu, diagramu je jediný člen seznamu.
this.IsDiagramSelected() - truePokud by uživatel klepnul na prázdnou část diagramu.
this.IsCurrentDiagramEmpty()
this.IsSingleSelection()-uživatel nevybrali více obrazců
this.SingleSelection-tvar nebo diagram, který uživatel klepli pravým tlačítkem myši
shape.ModelElement as MyLanguageElement-prvek modelu zastoupena obrazcem.
Další informace o tom, jak přejít z element elementu a jak vytvořit objekty a propojení, viz Navigace a aktualizace modelu v kódu programu.
Viz také
Úkoly
Jak: přidat příkaz místní nabídky
[přesměrovat] Názorný postup: Získání informací z vybraného propojení
Referenční dokumentace
Koncepty
Jak přidat prvky uživatelského rozhraní IDE VSPackages
Další zdroje
Zápis kódu nastavit domény specifické pro jazyk
Tabulka příkazu Visual Studio (.Soubory Vsct)