Freigeben über


Gewusst wie: Ändern eines Standardmenübefehls in einer domänenspezifischen Sprache

Sie können das Verhalten einiger der Standardeinstellung ändern, die Befehle automatisch im DSL definiert sind.Beispielsweise können Sie Ausschneiden so ändern, dass es keine vertraulichen Informationen ausschließt.Hierzu überschreiben Sie die Methoden in einer festgelegten Klasse des Befehls.Diese Klassen werden in der CommandSet.cs-Datei im DslPackage-Projekt definiert, und sind CommandSetabgeleitet.

Zusammenfassend einen Befehl ändern:

  1. Ermitteln Sie, welche Befehle können Sie ändern.

  2. Erstellen Sie eine partielle Deklaration der festgelegten Klasse des zugehörigen Befehls.

  3. Überschreiben Sie die Methoden und ProcessOnStatus ProcessOnMenu für den Befehl.

In diesem Thema werden diese Prozedur.

HinweisHinweis

Wenn Sie besitzen Menübefehle erstellen möchten, finden Sie unter Gewusst wie: Hinzufügen eines Befehls zum Kontextmenü.

Welche Befehle können Sie ändern?

So ermitteln Sie ändern können, welche Befehle

  1. Im DslPackage Projekt öffnen Sie GeneratedCode \ CommandSet.cs.Diese C#-Datei kann als Explorer gefunden CommandSet.ttder Niederlassung in der Projektmappe sein.

  2. Sucht Klassen in dieser Datei, deren Namen mit „CommandSet“ enden, z Language1CommandSet und Language1ClipboardCommandSet.

  3. In jeder festgelegten Klasse des Befehlsoverride“ Typ „, gefolgt von einem Leerzeichen.IntelliSense zeigt eine Liste der Methoden, die Sie überschreiben können.Jeder Befehl verfügt über zwei Methoden, deren Namen „ProcessOnStatus“ und „ProcessOnMenu“ beginnen.

  4. Hinweis, der aus die Option Klassen des Befehls den Befehl enthält, Sie ändern möchten.

  5. Schließen Sie die Datei, ohne die Änderungen zu speichern.

    HinweisHinweis

    Normalerweise sollten Sie Dateien nicht bearbeiten, die generiert wurden.Alle Bearbeitungen sind beim nächsten Mal verloren, die die Dateien generiert werden.

Erweitern Sie die Klasse des zugehörigen Befehls

Erstellen Sie eine neue Datei, die eine partielle Deklaration der festgelegten Klasse des Befehls enthält.

So erstellen Sie die Klasse des Befehls erweitern

  1. Öffnen Sie im Projektmappen-Explorer im DslPackage-Projekt, den GeneratedCode-Ordner, und klicken Sie dann unter Suchen und öffnen CommandSet.tt die generierte Datei CommandSet.cs.Beachten Sie den Namespace und den Namen der ersten Klasse, die es definiert ist.Beispielsweise wird:

    namespace Company.Language1

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

  2. In DslPackageerstellen Sie einen Ordner mit dem Namen benutzerdefinierten Code.Erstellen Sie in diesem Ordner eine neue Klassendatei mit dem Namen CommandSet.cs.

  3. In der neuen Datei schreiben Sie eine partielle Deklaration, die denselben Namespace und Namen wie die generierte partielle Klasse hat.Beispiele:

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

    Hinweis, wenn Sie die Vorlage Klassendatei verwenden, um die neue Datei zu erstellen, müssen Sie den Namespace und den Klassennamen beheben.

Überschreiben Sie die Methoden Befehls

Die meisten Befehle verfügen über zwei zugeordnete Methoden: Die Methode mit einem Namen wie ProcessOnStatus…bestimmt, ob der Befehl sichtbar sein soll und aktiviert hat.Sie wird aufgerufen, wenn der Benutzer auf das Diagramm mit der rechten Maustaste klickt. Außerdem muss schnell ausgeführt werden und keine Änderungen vornehmen.ProcessOnMenu…wird aufgerufen, wenn der Benutzer auf den Befehl klickt. Außerdem muss die Aufgabe des Befehls ausführen.Sie können entweder eine oder beide dieser Methoden überschreiben.

Dd820672.collapse_all(de-de,VS.110).gifSo ändern, wenn der Befehl in einem Menü angezeigt wird

Überschreiben Sie die ProcessOnStatus…-Methode.Diese Methode sollte die sichtbaren Eigenschaften des Parameters und aktivierten MenuCommand festlegen.Normalerweise betrachtete der Befehl this.CurrentSelection betrachtet werden, um zu bestimmen, ob der Befehl für die ausgewählten Elemente gilt, sowie die zugehörigen Eigenschaften, um festzustellen, ob der Befehl in ihrem aktuellen Zustand angewendet werden kann.

Ein allgemeines Handbuch sollte die sichtbare Eigenschaft mit der bestimmt werden, welche Elemente ausgewählt werden.Die Enabled-Eigenschaft, die bestimmt, ob der Befehl Schwarz über Grau oder im Menü angezeigt wird, sollte von der aktuellen Zustands der Auswahl abhängen.

Das folgende Beispiel deaktiviert das Menüelement löschen, wenn er mehr als eine Form ausgewählt hat.

HinweisHinweis

Diese Methode wirkt sich nicht, ob der Befehl über eine Tastatureingabe verfügbar ist.Zum Beispiel hat zur Folge, dass das Deaktivieren der menüelements den Befehl Löschen nicht aufgerufen werden durch die ENTF-TASTE.

/// <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;
  }
}

Es empfiehlt sich, zuerst die Basismethode aufgerufen werden alle Fälle zu behandeln und Einstellungen, mit denen Sie nicht betroffen sind.

Die ProcessOnStatus-Methode sollte Elemente im Speicher nicht erstellen, aktualisieren oder löschen.

Dd820672.collapse_all(de-de,VS.110).gifSo ändern Sie das Verhalten des Befehls

Überschreiben Sie die ProcessOnMenu…-Methode.Im folgenden Beispiel wird verhindert, dass der Benutzer an mehrere Elemente gleichzeitig auch deaktivieren, indem Sie die ENTF-TASTE.

/// <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();
  }
}

Wenn der Code Änderungen im Speicher, z. B. das Erstellen vornimmt und Elemente oder Links löscht oder aktualisiert, müssen Sie innerhalb einer Transaktion.Weitere Informationen finden Sie unter Gewusst wie: Ändern eines Standardmenübefehls in einer domänenspezifischen Sprache.

Dd820672.collapse_all(de-de,VS.110).gifSchreiben des Methodencodes

Die folgenden Fragmente sind innerhalb dieser Methoden häufig nützlich:

  • this.CurrentSelection.Klicken Sie auf die Form, die der Benutzer mit der rechten Maustaste geklickt hat, wird immer in dieser Liste von Formen und Konnektoren enthalten.Wenn der Benutzer auf einen leeren Bereich des Diagramms klickt, wird das Diagramm einziger Member der Liste.

  • this.IsDiagramSelected() - true , wenn der Benutzer auf einen leeren Bereich des Diagramms geklickt hat.

  • this.IsCurrentDiagramEmpty()

  • this.IsSingleSelection() - der Benutzer die nicht mehrere Formen aus

  • this.SingleSelection - auf die Form oder das Diagramm, die der Benutzer mit der rechten Maustaste geklickt hat

  • shape.ModelElement as MyLanguageElement - Das Modellelement, dargestellt durch eine Form.

Weitere Informationen zum Erstellen von Element zu Element und navigiert zur Verwendung von Objekten und Verbindungen finden Sie unter Navigieren in und Aktualisieren von Modellen im Programmcodeerstellt wird.

Siehe auch

Aufgaben

Gewusst wie: Hinzufügen eines Befehls zum Kontextmenü

[umleiten] Exemplarische Vorgehensweise: Abrufen von Informationen von einem ausgewählten Link

Referenz

MenuCommand

Konzepte

Wie VSPackages Benutzeroberflächenelemente Hinzufügen der IDE

VSCT-XML-Schemaverweis

Weitere Ressourcen

Schreiben von Code zum Anpassen einer domänenspezifischen Sprache

(Visual Studio-Befehls-Tabelle. Dateien Vsct)

Beispiel für eine Schaltplan - VMSDK. Umfangreicher Code Customizationhttps://code.msdn.microsoft.com/Visualization-Modeling-SDK-763778e8Sample

: DSL Stromkreis Diagramshttps://code.msdn.microsoft.com/Visualization-Modeling-SDK-763778e8