Cómo: Modificar comandos de menú estándar en lenguajes específicos de dominio
Puede modificar el comportamiento de algunos comandos estándar que se definen automáticamente en ADSL.Por ejemplo, podría modificar Cortar para que excluya la información confidencial.Para ello, reemplace métodos en una clase determinada del comando.Estas clases se definen en el archivo de CommandSet.cs, en el proyecto de DslPackage, y son derivadas de CommandSet.
en resumen, modificar un comando:
Detectar qué comandos puede modificar.
Cree una declaración de clase parcial determinada de comando adecuado.
invalide los métodos de ProcessOnStatus y de ProcessOnMenu para el comando.
este tema explica este procedimiento.
[!NOTA]
Si desea crear para sus propios comandos de menú, vea Cómo: Agregar un comando a un menú contextual.
¿Qué comandos puede modificar?
Para detectar qué comandos puede modificar
En el proyecto de DslPackage , abra GeneratedCode \CommandSet .cs.Este archivo de C# se puede encontrar en el explorador de soluciones como subsidiaria de CommandSet.tt.
Busque las clases de este archivo cuyos nombres finalizan con “CommandSet”, por ejemplo Language1CommandSet y Language1ClipboardCommandSet.
En cada clase determinada del comando, el tipo “override” seguido por un espacio.IntelliSense mostrará una lista de los métodos que se pueden reemplazar.Cada comando tiene un par de métodos cuyo inicio “ProcessOnStatus” y “ProcessOnMenu” names.
La nota que de las clases específicas de comando contiene el comando desea modificar.
Cierre el archivo sin guardar los cambios.
[!NOTA]
Normalmente, no debe modificar los archivos se han generado.Cualquier edición se perderá la próxima vez que los archivos se generan.
Extiende la clase determinada de comando adecuado
Cree un nuevo archivo que contiene una declaración de clase parcial particular del comando.
Para extender la clase determinada de comando
En el explorador de soluciones, en el proyecto de DslPackage, abra la carpeta GeneratedCode y después busca en CommandSet.tt y abra el archivo generado CommandSet.cs.Observe el espacio de nombres y el nombre de la primera clase definido allí.Por ejemplo, podría aparecer:
namespace Company.Language1
{ ... internal partial class Language1CommandSet : ...
en DslPackage, cree una carpeta denominada código personalizado.en esta carpeta, cree un nuevo archivo de clase denominado CommandSet.cs.
En el nuevo archivo, escriba una declaración parcial que tiene el mismo espacio de nombres y nombre que la clase parcial generada.Por ejemplo:
using System; using System.Collections.Generic; using System.ComponentModel.Design; namespace Company.Language1 /* Make sure this is correct */ { internal partial class Language1CommandSet { ...
Observe si utilizó la plantilla del archivo de clase para crear el nuevo archivo, debe corregir el espacio de nombres y el nombre de clase.
Invalide los métodos de comando
La mayoría de los comandos tienen dos métodos asociados: el método con un nombre como ProcessOnStatus…determina si el comando debe estar visible y habilitado.Se llama cada vez que el usuario haga clic con el botón secundario en el diagrama, y no debe ejecutarse rápidamente y realizar ningún cambio.ProcessOnMenu…se llama cuando el usuario hace clic en el comando, y debe realizar la función del comando.Quizás desee reemplazar uno o ambos de estos métodos.
Para cambiar al comando aparecerá en un menú
invalide el ProcessOnStatus…Método .Este método debe establecer el visible y propiedades enabled del parámetro MenuCommand.El comando busca normalmente this.CurrentSelection para determinar si el comando se aplica a los elementos seleccionados, y también podría examinar sus propiedades para determinar si el comando se puede aplicar en su estado actual.
Como guía general, la propiedad Visible debe determinar por qué elementos están seleccionados.La propiedad enabled, que determina si aparece el comando negro o gris en el menú, debe depender del estado de selección actual.
El ejemplo siguiente deshabilita el elemento de menú delete cuando el usuario tiene más de una forma seleccionado.
[!NOTA]
Este método no determina si el comando está disponible con una tecla.Por ejemplo, para deshabilitar el elemento de menú delete no impide que se invoque el comando mediante la tecla SUPR.
/// <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;
}
}
Se recomienda llamar al método base primero, tratar de casos y la configuración que no se hace referencia.
el método de ProcessOnStatus no debe crear, eliminar, o actualizar elementos en el almacén.
Para cambiar el comportamiento de comando
invalide el ProcessOnMenu…Método .El ejemplo siguiente impide que el usuario elimina más de un elemento a la vez, incluso con la tecla SUPR.
/// <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();
}
}
Si el código realiza cambios en el almacén, como crear, eliminar o actualizar elementos o vínculos, debe hacerlo dentro de una transacción.Para obtener más información, vea Cómo: Modificar comandos de menú estándar en lenguajes específicos de dominio.
Escribir el código de los métodos
Fragmentos siguientes suelen ser útiles dentro de estos métodos:
this.CurrentSelection.La forma en la que el usuario hizo clic derecho siempre se incluye en esta lista de formas y conectores.Si el usuario hace clic en una parte en blanco del diagrama, el diagrama es el único miembro de la lista.
this.IsDiagramSelected() - true si el usuario hizo clic en una parte en blanco del diagrama.
this.IsCurrentDiagramEmpty()
this.IsSingleSelection() - el usuario no seleccione varias formas
this.SingleSelection - la forma o el diagrama que hizo clic el usuario derecho
shape.ModelElement as MyLanguageElement - el elemento modelo representado por una forma.
Para obtener más información sobre cómo navegar de elemento a elemento y sobre cómo establecer objetos y las relaciones, vea Navegar y actualizar un modelo en el código del programa.
Vea también
Tareas
Cómo: Agregar un comando a un menú contextual
[redirigir] Tutorial: Obtener información de un vínculo seleccionado
Referencia
Conceptos
Cómo VSPackages agrega elementos de la interfaz de usuario al IDE
Referencia del esquema XML de VSCT
Otros recursos
Escribir código para personalizar lenguajes específicos de dominio
Tabla de comandos de Visual Studio (. archivos de Vsct)
: circuito Diagramshttps://code.msdn.microsoft.com/Visualization-Modeling-SDK-763778e8