Condividi tramite


Procedura: modificare un comando di menu standard in un linguaggio specifico di dominio

È possibile modificare il comportamento di alcuni controlli standard definiti automaticamente nel modello DSL.Ad esempio, è possibile modificare tagliare in modo che escluda le informazioni riservate.A tale scopo, si esegue l'override dei metodi di una classe con set di comando.Queste classi sono definite nel file di CommandSet.cs, nel progetto DslPackage e sono derivate da CommandSet.

In breve, modificare un comando:

  1. Individuare i comandi che è possibile modificare.

  2. Creare una dichiarazione parziale della classe del comando appropriato.

  3. Eseguire l'override dei metodi di ProcessOnMenu e di ProcessOnStatus per il comando.

In questo argomento viene illustrata questa procedura.

[!NOTA]

Se si desidera creare per contenere i comandi di menu, vedere Procedura: aggiungere un comando al menu di scelta rapida.

I comandi che è possibile modificare?

Per individuare i comandi che è possibile modificare

  1. in DslPackage progetto, aprire GeneratedCode \CommandSet .cs.Questo file c# può essere in Esplora soluzioni trovato come file sussidiario di CommandSet.tt.

  2. Trovare le classi in questo file i cui nomi terminano con “CommandSet“, ad esempio Language1CommandSet e Language1ClipboardCommandSet.

  3. In ogni classe con set di comando, digitare “override“seguita da uno spazio.IntelliSense mostrerà un elenco di metodi che è possibile eseguire l'override.Ogni comando è disponibile una coppia di metodi i cui nomi iniziano “ProcessOnStatus“e„ProcessOnMenu“.

  4. Si noti che le classi definite di comando contiene il comando che si desidera modificare.

  5. chiudere il file senza salvare le modifiche.

    [!NOTA]

    In genere, non è necessario modificare i file generati.Tutte le modifiche andranno perse la volta successiva che i file vengano generati.

Estendere la classe del comando appropriato

Creare un nuovo file contenente una dichiarazione parziale della classe con set di comando.

Per estendere la classe con set di comando

  1. In Esplora soluzioni, Nel progetto DslPackage, aprire la cartella GeneratedCode quindi cerca in CommandSet.tt e apre il file generato CommandSet.cs.Si noti lo spazio dei nomi e il nome di classe definita in.Ad esempio, è possibile vedere:

    namespace Company.Language1

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

  2. in DslPackage, creare una cartella denominata codice personalizzato.In questa cartella, creare un nuovo file di classe denominato CommandSet.cs.

  3. Nel nuovo file, scrivere una dichiarazione parziale con lo stesso spazio dei nomi e nome della classe parziale generata.Di seguito è riportato un esempio:

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

    nota   Se è stato utilizzato il modello di file della classe per creare il nuovo file, è necessario correggere sia lo spazio dei nomi dal nome della classe.

Eseguire l'override dei metodi di comando

La maggior parte dei controlli dispongono di due metodi associati: Il metodo con un nome sarà ProcessOnStatus…determina se il comando deve essere visibile e abilitato.Viene chiamata ogni volta che l'utente fa clic con il pulsante destro del mouse sul diagramma deve eseguire rapidamente e non apportare modifiche.ProcessOnMenu…viene chiamato quando l'utente fa clic sul comando e deve eseguire la funzione del comando.È possibile eseguire l'override di uno o di entrambi questi metodi.

Dd820672.collapse_all(it-it,VS.110).gifPer modificare quando il comando viene visualizzato in un menu

Eseguire l'override del ProcessOnStatus…Metodo .Questo metodo deve impostare le proprietà visibili e attivazione del parametro MenuCommand.In genere gli aspetti del comando a this.CurrentSelection per determinare se il comando viene applicato agli elementi selezionati e potrebbero inoltre esaminare le relative proprietà per determinare se sia possibile applicare allo stato corrente.

Come guida generale, la proprietà visibile deve essere determinata dagli elementi selezionati.La proprietà attivata, che determina se il comando viene visualizzato il nero o ingrigisce scegliere dal menu, deve dipendere dallo stato corrente della selezione.

Nell'esempio seguente viene disabilitata la voce di menu di eliminazione quando l'utente ha selezionato più di una forma.

[!NOTA]

Questo metodo non influisce su se il comando è disponibile con una sequenza di tasti.Ad esempio, disabilitare la voce di menu di eliminazione non impedisce al comando di essere richiamato dalla chiave di eliminazione.

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

È consigliabile chiamare il metodo di base in primo luogo, la gestione di tutti i casi e impostazioni di cui non è necessario stabilire.

Il metodo di ProcessOnStatus non deve creare, eliminare, o aggiornare elementi nell'archivio.

Dd820672.collapse_all(it-it,VS.110).gifPer modificare il comportamento di comando

Eseguire l'override del ProcessOnMenu…Metodo .Nell'esempio impossibilità di eliminare più di un elemento alla volta, anche utilizzando la chiave di eliminazione.

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

Se il codice apportare le modifiche all'archivio, la creazione, l'eliminazione o l'aggiornamento degli elementi o i collegamenti, è necessario farlo in una transazione.Per ulteriori informazioni, vedere Procedura: modificare un comando di menu standard in un linguaggio specifico di dominio.

Dd820672.collapse_all(it-it,VS.110).gifScrittura del codice dei metodi

I seguenti frammenti vengono spesso utili all'interno di questi metodi:

  • this.CurrentSelection.La forma che l'utente ha fatto clic con il pulsante destro del mouse è inclusa sempre in questo elenco delle forme e i connettori.Se l'utente fa clic su una parte vuota del diagramma, il diagramma è l'unico membro list.

  • this.IsDiagramSelected() - true se l'utente fa clic su una parte vuota del diagramma.

  • this.IsCurrentDiagramEmpty()

  • this.IsSingleSelection() - l'utente non ha selezionato più forme

  • this.SingleSelection - la forma o diagramma che l'utente ha fatto clic con il pulsante destro del mouse

  • shape.ModelElement as MyLanguageElement - l'elemento del modello rappresentato da una forma.

Per ulteriori informazioni su come passare da un elemento e su come creare oggetti e collegamenti, vedere Esplorazione e aggiornamento di un modello nel codice del programma.

Vedere anche

Attività

Procedura: aggiungere un comando al menu di scelta rapida

[reindirizzamento] Procedura dettagliata: ottenere informazioni da un collegamento selezionato

Riferimenti

MenuCommand

Concetti

Come Vspackage aggiunge gli elementi dell'interfaccia utente dell'IDE

Riferimento XML Schema VSCT

Altre risorse

Scrittura di codice per personalizzare un linguaggio specifico di dominio

Tabella dei comandi di Visual Studio (. file di Vsct)

VMSDK - esempio gli schemi circuitali. La personalizzazione estensiva DSL

codice di esempio: schemi circuitali