Могу ли я программно изменить контекстное меню среды IDE? - PullRequest
1 голос
/ 18 августа 2011

Я пытаюсь создать дополнительный пункт меню для меню «Проект и контекстные меню решений> Решение». Однако я хотел, чтобы это контекстное меню появлялось ТОЛЬКО при открытии определенного решения, иначе я не хочу, чтобы оно отображалось. Я подумал, что мог бы использовать MACROS в Visual Studio IDE. Есть мероприятия по запуску решений и проектов и т. Д.

У меня вопрос: могу ли я создать контекстное меню, которое я хочу, программно, навести его на MACRO, который я хочу запустить, а затем программно прикрепить его к меню CONTEXT внутри IDE, в котором я хочу его отобразить? *

Ответы [ 3 ]

2 голосов
/ 12 ноября 2011

Я нашел эту ссылку , которая будет очень полезной.

Внутри метода OnConnection у меня было это:Нажмите обработчики событий, я сделал все, что было нужно.

Обратите внимание, что это было для основного меню с подпунктами.Только для одного предмета проверьте это видео .Парень идет шаг за шагом ... Очень хорошо сделано.

0 голосов
/ 01 сентября 2011

Я нашел ответ на свой вопрос. Я использовал следующий код для создания необходимых мне пунктов меню:

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 
0 голосов
/ 24 августа 2011

Вы можете использовать DTE.ExecuteCommand() для выполнения других макросов.

...