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:
Zjistit, jaké příkazy, můžete upravit.
Vytvořte částečné deklaraci třídy sady příslušný příkaz.
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
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.
Najít třídy v tomto souboru, jejichž názvy končí "CommandSet", například Language1CommandSet a Language1ClipboardCommandSet.
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".
Všimněte si, jež příkazu nastavena třídy obsahuje příkaz, který chcete upravit.
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
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 : ...
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 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
Koncepty
Jak přidat prvky uživatelského rozhraní IDE VSPackages
Další zdroje
Zápis kódu pro úpravu jazyka specifického pro doménu
Tabulka příkazu Visual Studio (.Soubory Vsct)