Partager via


WorkflowMenuCommands.SelectionMenu Champ

Définition

CommandID pouvant être utilisé pour accéder au menu Sélection. Ce champ est en lecture seule.

public: static initonly System::ComponentModel::Design::CommandID ^ SelectionMenu;
public static readonly System.ComponentModel.Design.CommandID SelectionMenu;
 staticval mutable SelectionMenu : System.ComponentModel.Design.CommandID
Public Shared ReadOnly SelectionMenu As CommandID 

Valeur de champ

CommandID

Exemples

L'exemple suivant montre comment créer un MenuCommandService personnalisé. Dans cet exemple, un menu contextuel est créé lorsque le ShowContextMenu est appelé. Dans la méthode GetSelectionMenuItems, la classe WorkflowMenuCommands est utilisée pour associer les commandes de menu appropriées fournies par le concepteur de workflow au texte correspondant. Un gestionnaire d'événements est ensuite associé à chaque commande afin que le MenuCommand approprié soit appelé lorsqu'une commande est sélectionnée.

internal sealed class WorkflowMenuCommandService : MenuCommandService
{
    public WorkflowMenuCommandService(IServiceProvider serviceProvider)
        : base(serviceProvider)
    {
    }

    public override void ShowContextMenu(CommandID menuID, int x, int y)
    {
        if (menuID == WorkflowMenuCommands.SelectionMenu)
        {
            ContextMenu contextMenu = new ContextMenu();

            foreach (DesignerVerb verb in Verbs)
            {
                MenuItem menuItem = new MenuItem(verb.Text, new EventHandler(OnMenuClicked));
                menuItem.Tag = verb;
                contextMenu.MenuItems.Add(menuItem);
            }

            MenuItem[] items = GetSelectionMenuItems();
            if (items.Length > 0)
            {
                contextMenu.MenuItems.Add(new MenuItem("-"));
                foreach (MenuItem item in items)
                    contextMenu.MenuItems.Add(item);
            }

            WorkflowView workflowView = GetService(typeof(WorkflowView)) as WorkflowView;
            if (workflowView != null)
                contextMenu.Show(workflowView, workflowView.PointToClient(new Point(x, y)));
        }
    }

    private MenuItem[] GetSelectionMenuItems()
    {
        List<MenuItem> menuItems = new List<MenuItem>();

        bool addMenuItems = true;
        ISelectionService selectionService = GetService(typeof(ISelectionService)) as ISelectionService;
        if (selectionService != null)
        {
            foreach (object obj in selectionService.GetSelectedComponents())
            {
                if (!(obj is Activity))
                {
                    addMenuItems = false;
                    break;
                }
            }
        }

        if (addMenuItems)
        {
            Dictionary<CommandID, string> selectionCommands = new Dictionary<CommandID, string>();
            selectionCommands.Add(WorkflowMenuCommands.Cut, "Cut");
            selectionCommands.Add(WorkflowMenuCommands.Copy, "Copy");
            selectionCommands.Add(WorkflowMenuCommands.Paste, "Paste");
            selectionCommands.Add(WorkflowMenuCommands.Delete, "Delete");
            selectionCommands.Add(WorkflowMenuCommands.Collapse, "Collapse");
            selectionCommands.Add(WorkflowMenuCommands.Expand, "Expand");
            selectionCommands.Add(WorkflowMenuCommands.Disable, "Disable");
            selectionCommands.Add(WorkflowMenuCommands.Enable, "Enable");

            foreach (CommandID id in selectionCommands.Keys)
            {
                MenuCommand command = FindCommand(id);
                if (command != null)
                {
                    MenuItem menuItem = new MenuItem(selectionCommands[id], new EventHandler(OnMenuClicked));
                    menuItem.Tag = command;
                    menuItems.Add(menuItem);
                }
            }
        }

        return menuItems.ToArray();
    }

    private void OnMenuClicked(object sender, EventArgs e)
    {
        MenuItem menuItem = sender as MenuItem;
        if (menuItem != null && menuItem.Tag is MenuCommand)
        {
            MenuCommand command = menuItem.Tag as MenuCommand;
            command.Invoke();
        }
    }
}
Friend NotInheritable Class WorkflowMenuCommandService
    Inherits MenuCommandService
    Public Sub New(ByVal serviceProvider As IServiceProvider)
        MyBase.new(serviceProvider)
    End Sub
    Public Overrides Sub ShowContextMenu(ByVal menuID As CommandID, ByVal x As Integer, ByVal y As Integer)

        If menuID.ID = WorkflowMenuCommands.SelectionMenu.ID Then
            Dim contextMenu As New ContextMenu()

            For Each verb As DesignerVerb In Verbs
                Dim MenuItem As New MenuItem(verb.Text, AddressOf OnMenuClicked)
                MenuItem.Tag = verb
                contextMenu.MenuItems.Add(MenuItem)
            Next

            Dim items As MenuItem() = GetSelectionMenuItems()
            If (items.Length > 0) Then

                contextMenu.MenuItems.Add(New MenuItem("-"))
                For Each item As MenuItem In items
                    contextMenu.MenuItems.Add(item)
                Next

                Dim workflowView As WorkflowView = CType(GetService(GetType(WorkflowView)), WorkflowView)
                If workflowView Is Nothing Then
                    contextMenu.Show(workflowView, workflowView.PointToClient(New Point(x, y)))
                End If
            End If
        End If
    End Sub

    Private Function GetSelectionMenuItems() As MenuItem()

        Dim menuItems As New List(Of MenuItem)()

        Dim addMenuItems As Boolean = True
        Dim selectionService As ISelectionService = CType(GetService(GetType(ISelectionService)), ISelectionService)
        If selectionService IsNot Nothing Then

            For Each obj As Object In selectionService.GetSelectedComponents()
                If Not TypeOf obj Is Activity Then
                    addMenuItems = False
                    Exit For
                End If
            Next
        End If


        If (addMenuItems) Then

            Dim selectionCommands As New Dictionary(Of CommandID, String)()
            selectionCommands.Add(WorkflowMenuCommands.Cut, "Cut")
            selectionCommands.Add(WorkflowMenuCommands.Copy, "Copy")
            selectionCommands.Add(WorkflowMenuCommands.Paste, "Paste")
            selectionCommands.Add(WorkflowMenuCommands.Delete, "Delete")
            selectionCommands.Add(WorkflowMenuCommands.Collapse, "Collapse")
            selectionCommands.Add(WorkflowMenuCommands.Expand, "Expand")
            selectionCommands.Add(WorkflowMenuCommands.Disable, "Disable")
            selectionCommands.Add(WorkflowMenuCommands.Enable, "Enable")

            For Each id As CommandID In selectionCommands.Keys

                Dim command As MenuCommand = FindCommand(id)
                If command IsNot Nothing Then
                    Dim menuItem As New MenuItem(selectionCommands(id), AddressOf OnMenuClicked)
                    menuItem.Tag = command
                    menuItems.Add(menuItem)
                End If
            Next
        End If

        Return menuItems.ToArray()
    End Function

    Private Sub OnMenuClicked(ByVal sender As Object, ByVal e As EventArgs)

        Dim menuItem As MenuItem = CType(sender, MenuItem)
        If menuItem IsNot Nothing And TypeOf menuItem.Tag Is MenuCommand Then
            Dim command As MenuCommand = CType(menuItem.Tag, MenuCommand)
            command.Invoke()
        End If
    End Sub
End Class

Pour activer ce service, appelez la méthode AddService de la propriété LoaderHost dans une classe WorkflowDesignerLoader comme illustré dans l'exemple suivant.

protected override void Initialize()
{
    base.Initialize();

    IDesignerLoaderHost host = this.LoaderHost;
    if (host != null)
    {
        host.RemoveService(typeof(IIdentifierCreationService));
        host.AddService(typeof(IIdentifierCreationService), new IdentifierCreationService(host));
        host.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(host));
        host.AddService(typeof(IToolboxService), new Toolbox(host));
        TypeProvider typeProvider = new TypeProvider(host);
        typeProvider.AddAssemblyReference(typeof(string).Assembly.Location);
        host.AddService(typeof(ITypeProvider), typeProvider, true);
        host.AddService(typeof(IEventBindingService), new EventBindingService());
    }
}
Protected Overrides Sub Initialize()
    MyBase.Initialize()

    Dim host As IDesignerLoaderHost = Me.LoaderHost
    If host IsNot Nothing Then
        host.RemoveService(GetType(IIdentifierCreationService))
        host.AddService(GetType(IIdentifierCreationService), New IdentifierCreationService(host))
        host.AddService(GetType(IMenuCommandService), New WorkflowMenuCommandService(host))
        host.AddService(GetType(IToolboxService), New Toolbox(host))
        Dim typeProvider As New TypeProvider(host)
        typeProvider.AddAssemblyReference(GetType(String).Assembly.Location)
        host.AddService(GetType(ITypeProvider), typeProvider, True)
        host.AddService(GetType(IEventBindingService), New EventBindingService())
    End If
End Sub

Remarques

Le menu Sélection est généralement utilisé pour gérer une sélection au sein du workflow.

S’applique à