Comment : modifier une commande de menu standard dans un langage spécifique à un domaine
Vous pouvez modifier le comportement de certaines commandes standard qui sont définies automatiquement dans votre DÉSOLÉ.Par exemple, vous pouvez modifier Couper afin qu'il exclue des informations sensibles.Pour ce faire, vous substituent les méthodes d'une classe de jeu de commandes.ces classes sont définies dans le fichier de CommandSet.cs, dans le projet de DslPackage, et sont dérivées d' CommandSet.
en résumé, pour modifier une commande :
Découvrez les commandes vous pouvez modifier.
Créez une déclaration partielle de la classe appropriée du jeu de commandes.
substituez les méthodes de ProcessOnStatus et de ProcessOnMenu pour la commande.
Cette rubrique illustre cette procédure.
[!REMARQUE]
Si vous souhaitez créer vos propres commandes de menu, consultez le Comment : ajouter une commande au menu contextuel.
Les commandes pouvez -vous modifier ?
Pour découvrir les commandes vous pouvez modifier
dans le projet de DslPackage , ouvrez GeneratedCode \CommandSet .cs.Ce fichier c# peut être dans l'explorateur de solutions trouvé comme filiale de CommandSet.tt.
Recherchez les classes dans ce fichier dont les noms se terminent par « CommandSet », par exemple Language1CommandSet et Language1ClipboardCommandSet.
Dans chaque classe de jeu de commandes, tapez « override » suivi d'un espace.Intellisense affiche une liste des méthodes que vous pouvez substituer.Chaque commande possède une paire de méthodes dont les noms commencent « ProcessOnStatus » et « ProcessOnMenu ».
Notez que les classes de jeu de commandes contient la commande que vous souhaitez modifier.
Fermez le fichier sans enregistrer les modifications.
[!REMARQUE]
En règle générale, vous ne devez pas modifier les fichiers générés.Toutes les modifications seront perdues la prochaine fois que les fichiers sont générés.
Étendez la classe appropriée du jeu de commandes
Créez un fichier qui contient une déclaration partielle de la classe de jeu de commandes.
pour étendre la classe de jeu de commandes
Dans l'explorateur de solutions, dans le projet de DslPackage, ouvrez le dossier GeneratedCode puis le regardez sous CommandSet.tt et ouvrez le fichier généré CommandSet.cs.Notez l'espace de noms et le nom de la première classe définie à cet endroit.Par exemple, vous pouvez voir :
namespace Company.Language1
{ ... internal partial class Language1CommandSet : ...
dans DslPackage, créez un dossier nommé code personnalisé.Dans ce dossier, créez un fichier de classe nommé CommandSet.cs.
Dans le nouveau fichier, écrivez une déclaration partielle qui a le même espace de noms et nom que la classe partielle générée.Par exemple :
using System; using System.Collections.Generic; using System.ComponentModel.Design; namespace Company.Language1 /* Make sure this is correct */ { internal partial class Language1CommandSet { ...
Remarque si vous avez utilisé le modèle de fichier de la classe pour créer le nouveau fichier, vous devez corriger l'espace de noms et le nom de la classe.
substituez les méthodes de commande
la plupart des commandes ont deux méthodes associées : la méthode avec un nom comme ProcessOnStatus…détermine si la commande doit être visible et active.Il est appelé lorsque l'utilisateur clique avec le bouton droit sur le diagramme, et doit exécuter rapidement et n'apporter de modification.ProcessOnMenu…est appelé lorsque l'utilisateur clique sur la commande, et doit remplir la fonction de la commande.Vous pouvez substituer either one or both de ces méthodes.
Pour changer lorsque la commande apparaît dans un menu
substituez le ProcessOnStatus…Méthode .Cette méthode doit définir le visible et les propriétés Enabled de son paramètre MenuCommand.En général la commande recherche this.CurrentSelection pour déterminer si la commande s'applique aux éléments sélectionnés, et peut également consulter leurs propriétés pour déterminer si la commande peut être appliquée dans leur état actuel.
Conseil général, la propriété Visible doit être déterminée par les éléments sont sélectionnés.La propriété Enabled, qui détermine si la commande apparaît le noir ou le gris dans le menu, doit dépendre de l'état actuel de la sélection.
L'exemple suivant efface l'élément de menu de suppression lorsque l'utilisateur a sélectionné plusieurs forme.
[!REMARQUE]
Cette méthode ne l'affecte pas si la commande est disponible par le biais d'une séquence de touches.Par exemple, désactiver l'élément de menu de suppression n'empêché pas la commande d'être appelé via la touche SUPPR.
/// <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;
}
}
C'est une méthode conseillée pour appeler la méthode de base en premier, de traiter tous les cas et des paramètres par lesquels vous n'êtes pas concerné.
La méthode de ProcessOnStatus ne doit pas créer, supprimer, ou mettre à jour des éléments dans le magasin.
pour modifier le comportement de la commande
substituez le ProcessOnMenu…Méthode .L'exemple suivant empêché l'utilisateur de supprimer plusieurs éléments à la fois, même en utilisant la touche SUPPR.
/// <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 votre code effectue des modifications au magasin, telle que la création, la suppression ou la mise à jour des éléments ou des liens, vous devez le faire dans une transaction.Pour plus d'informations, consultez Comment : modifier une commande de menu standard dans un langage spécifique à un domaine.
Écriture du code des méthodes
Les fragments suivants sont souvent utiles dans ces méthodes :
this.CurrentSelection.La forme que l'utilisateur a un clic avec le bouton droit est toujours inclus dans cette liste de formes et de connecteurs.Si l'utilisateur clique sur une partie vide du diagramme, le diagramme est le seul membre de la liste.
this.IsDiagramSelected() - true si l'utilisateur a cliqué sur une partie vide du diagramme.
this.IsCurrentDiagramEmpty()
this.IsSingleSelection() - l'utilisateur n'a pas sélectionné plusieurs formes
this.SingleSelection - la forme ou diagramme que l'utilisateur a sélectionnés avec le bouton droit sur
shape.ModelElement as MyLanguageElement - l'élément de modèle représenté par une forme.
Pour plus d'informations sur la navigation de l'élément à l'élément et sur la façon de créer des objets et des liens, consultez Navigation et mise à jour d'un modèle dans le code de programme.
Voir aussi
Tâches
Comment : ajouter une commande au menu contextuel
[redirection] Procédures pas à pas : obtention d'informations d'un lien sélectionné
Référence
Concepts
Comment les VSPackages ajoutent des éléments de l'interface utilisateur à l'IDE
Autres ressources
Écriture de code pour personnaliser un langage spécifique à un domaine
Tableau de commande Visual Studio (. fichiers de Vsct)
: - Diagramshttps://code.msdn.microsoft.com/Visualization-Modeling-SDK-763778e8