Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 是否可以通过编程方式修改IDE';s上下文菜单';s_Visual Studio 2010_Ide_Vb.net 2010_Visual Studio Macros - Fatal编程技术网

Visual studio 2010 是否可以通过编程方式修改IDE';s上下文菜单';s

Visual studio 2010 是否可以通过编程方式修改IDE';s上下文菜单';s,visual-studio-2010,ide,vb.net-2010,visual-studio-macros,Visual Studio 2010,Ide,Vb.net 2010,Visual Studio Macros,我正在尝试为“项目和解决方案上下文菜单>解决方案”菜单创建一个附加菜单项。但是,我希望此上下文菜单仅在打开某个解决方案时显示,否则我不希望它显示。我想我可以在VisualStudioIDE中使用宏。在打开解决方案和项目时会发生一些事件 我的问题是,我可以通过编程创建我想要的上下文菜单,将它指向我想要运行的宏,然后通过编程将它附加到IDE中我想要显示它的上下文菜单吗?你可以使用DTE.ExecuteCommand()来执行其他宏。我找到了我问题的答案。我使用以下代码创建了所需的菜单项: Priva

我正在尝试为“项目和解决方案上下文菜单>解决方案”菜单创建一个附加菜单项。但是,我希望此上下文菜单仅在打开某个解决方案时显示,否则我不希望它显示。我想我可以在VisualStudioIDE中使用宏。在打开解决方案和项目时会发生一些事件


我的问题是,我可以通过编程创建我想要的上下文菜单,将它指向我想要运行的宏,然后通过编程将它附加到IDE中我想要显示它的上下文菜单吗?

你可以使用
DTE.ExecuteCommand()
来执行其他宏。

我找到了我问题的答案。我使用以下代码创建了所需的菜单项:

Private WithEvents _objSolutionExplorer_ContextMenu_ItemHandler As EnvDTE.CommandBarEvents
Private _objHash_ContextMenuItemHandlers As New Hashtable

Private Function CreateContextMenuButtonItem(ByVal p_objMenuItem As Object, ByVal p_strMenuItemCaption As String) As CommandBarButton
    '************************************************************************
    ' Procedure/Function: CreateContextMenuButtonItem()
    ' Author: Ben Santiago
    ' Created On: 08/18/2011
    ' Description:
    '       Creates specified MenuButton item.
    '************************************************************************

    '***************************************
    ' Initialize Variables
    '***************************************
    Dim objMenuButton As CommandBarButton
    Dim objClickEventHandler As EnvDTE.CommandBarEvents

    '***************************************
    ' If MenuItem Exists, Delete It
    '***************************************
    For intCounter As Integer = 1 To p_objMenuItem.Controls.Count
        If p_objMenuItem.Controls.Item(intCounter).Caption = p_strMenuItemCaption Then
            p_objMenuItem.Controls.Item(intCounter).Delete()
            Exit For
        End If
    Next
    If EnvironmentEvents._objHash_ContextMenuItemHandlers.Contains(p_strMenuItemCaption) Then
        EnvironmentEvents._objHash_ContextMenuItemHandlers.Remove(p_strMenuItemCaption)
    End If

    '***************************************
    ' Create New Menu Item w/ Click Event Handling
    '***************************************
    objNewMenuItem = p_objMenuItem.Controls.Add(MsoControlType.msoControlButton, System.Reflection.Missing.Value, System.Reflection.Missing.Value, 1, True)
    objNewMenuItem.Caption = p_strMenuItemCaption
    objClickEventHandler = DTE.Events.CommandBarEvents(objNewMenuItem)
    AddHandler objClickEventHandler.Click, AddressOf TestScoring_objSolutionExplorer_ContextMenu_ItemHandler_Click
    If EnvironmentEvents._objHash_ContextMenuItemHandlers.Contains(p_strMenuItemCaption) Then
        EnvironmentEvents._objHash_ContextMenuItemHandlers.Remove(p_strMenuItemCaption)
    End If
    EnvironmentEvents._objHash_ContextMenuItemHandlers.Add(p_strMenuItemCaption, objClickEventHandler)

    '***************************************
    ' Return Reference To MenuButton Item
    '***************************************
    Return objNewMenuItem
End Function

Private Function CreateContextMenuPopupItem(ByVal p_strCommandBarName As String, ByVal p_strMenuCaption As String) As CommandBarPopup
    '************************************************************************
    ' Procedure/Function: CreateContextMenuPopupItem()
    ' Author: Ben Santiago
    ' Created On: 08/18/2011
    ' Description:
    '       Creates specified MenuPopup item.
    '************************************************************************

    '***************************************
    ' Initialize Variables
    '***************************************
    Dim objCommandBar As CommandBar = DTE.CommandBars(p_strCommandBarName)
    Dim objMenuPopup As CommandBarPopup

    '***************************************
    ' Search For Existing ContextMenuPopup
    '***************************************
    For intCounter As Integer = 1 To objCommandBar.Controls.Count
        If objCommandBar.Controls.Item(intCounter).Caption = p_strMenuCaption Then
            objMenuPopup = objCommandBar.Controls.Item(intCounter)
            Exit For
        End If
    Next

    If objMenuPopup Is Nothing Then
        '***************************************
        ' Create Menu If Needed
        '***************************************
        objMenuPopup = objCommandBar.Controls.Add(MsoControlType.msoControlPopup, System.Reflection.Missing.Value, System.Reflection.Missing.Value, 1, True)
        objMenuPopup.Caption = p_strMenuCaption
    Else
        '***************************************
        ' Delete All Child Menu Items
        '***************************************
        For intCounter As Integer = objMenuPopup.Controls.Count To 1 Step -1
            If EnvironmentEvents._objHash_ContextMenuItemHandlers.Contains(objMenuPopup.Controls.Item(intCounter).Caption) Then
                EnvironmentEvents._objHash_ContextMenuItemHandlers.Remove(objMenuPopup.Controls.Item(intCounter).Caption)
            End If
            objMenuPopup.Controls.Item(intCounter).Delete()
        Next
    End If

    '***************************************
    ' Return Reference To MenuPopup Item
    '***************************************
    Return objMenuPopup
End Function 
我发现它非常有用

在OnConnection方法中,我有:

CommandBars cmdBars = (CommandBars)applicationObject.CommandBars;
        CommandBar codeWindowCmdBar = cmdBars["Code Window"];

        CommandBarPopup doxygenPopup = (CommandBarPopup)codeWindowCmdBar.Controls.Add(MsoControlType.msoControlPopup,
                                    System.Reflection.Missing.Value,
                                    System.Reflection.Missing.Value, 
                                    1, 
                                    true);
        doxygenPopup.Caption = "Doxygen Commenting";


        CommandBarControl mnuListItem = (CommandBarControl)doxygenPopup.Controls.Add(MsoControlType.msoControlButton,
            System.Reflection.Missing.Value,
            System.Reflection.Missing.Value, 
            1, 
            true);

        mnuListItem.Caption = "Wrap as List Item";
        mnuListItemHandler = (CommandBarEvents) applicationObject.Events.get_CommandBarEvents(mnuListItem);
        mnuListItemHandler.Click += mnuListItemHandler_Click;

        CommandBarControl mnuUnorderedList = (CommandBarControl)doxygenPopup.Controls.Add(MsoControlType.msoControlButton,
            System.Reflection.Missing.Value,
            System.Reflection.Missing.Value,
            2,
            true);

        mnuUnorderedList.Caption = "Wrap as Unordered List";
        mnuUnorderedListHandler = (CommandBarEvents)applicationObject.Events.get_CommandBarEvents(mnuListItem);
        mnuUnorderedListHandler.Click += mnuUnorderedListHandler_Click;

        CommandBarControl mnuOrderedList = (CommandBarControl)doxygenPopup.Controls.Add(MsoControlType.msoControlButton,
            System.Reflection.Missing.Value,
            System.Reflection.Missing.Value,
            2,
            true);

        mnuOrderedList.Caption = "Wrap as Ordered List";
        mnuOrderedListHandler = (CommandBarEvents)applicationObject.Events.get_CommandBarEvents(mnuListItem);
        mnuOrderedListHandler.Click += mnuOrderedListHandler_Click;
在click事件处理程序中,我做了任何需要的事情

请注意,这不是针对带有子项的主菜单项。对于单个项目,请签出。那家伙一步一步地走。。。做得很好