共用方式為


如何:在工具功能表上公開增益集 (Visual Basic)

.Visual Studio 增益集在 Visual Studio 2013 中已不適用。 您應該升級您的增益集至 VSPackage 擴充套件。 如需升級的詳細資訊,請參閱 常見問題集:將增益集轉換成 VSPackage 擴充功能

當您使用 [增益集精靈] 建立增益集,並且選取將增益集顯示為命令的選項時,[工具] 功能表上就會預設顯示該命令。 但是,如果在建立增益集時略過此選項,只要再執行一次 [增益集精靈]、選取該選項,然後將現有的程式碼複製到新的增益集中就可以了。

如果無法執行上述程序,那麼下列程序也可以達到同樣的效果。

注意事項注意事項

根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。使用 [一般開發設定] 開發了這些程序。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱Visual Studio 中的自訂開發設定

若要在現有的增益集中加入功能表命令

  1. 請在增益集的 Connect 類別中,加入 Implements IDTCommandTarget。

    這麼做可讓您存取建立命令所需的 IDTCommandTarget 命令介面。

  2. OnConnection 程序中,加入下列程式碼:

    Imports System
    Imports Microsoft.VisualStudio.CommandBars
    Imports Extensibility
    Imports EnvDTE
    Imports EnvDTE80
    
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    If connectMode = ext_ConnectMode.ext_cm_Startup Then
        Dim commands As Commands2 = CType(_applicationObject.Commands, _
          Commands2)
        Dim toolsMenuName As String
        Try
            Dim resourceManager As System.Resources.ResourceManager = _
            New System.Resources.ResourceManager _
             ("MyAddin1.CommandBar", System.Reflection.Assembly. _
             GetExecutingAssembly())
    
            Dim cultureInfo As System.Globalization.CultureInfo = New _
             System.Globalization.CultureInfo(_applicationObject. _
             LocaleID)
            toolsMenuName = resourceManager.GetString(String.Concat _
              (cultureInfo.TwoLetterISOLanguageName, "Tools"))
    
        Catch e As Exception
            toolsMenuName = "Tools"
        End Try
    
        Dim commandBars As CommandBars = _
          CType(_applicationObject.CommandBars, CommandBars)
        Dim menuBarCommandBar As CommandBar = _
          commandBars.Item("MenuBar")
    
        Dim toolsControl As CommandBarControl = _
          menuBarCommandBar.Controls.Item(toolsMenuName)
        Dim toolsPopup As CommandBarPopup = CType(toolsControl, _
          CommandBarPopup)
    
        Try
            Dim command As Command = _
              commands.AddNamedCommand2(_addInInstance, "MyAddin1", _
              "MyAddin1", "Executes the command for MyAddin1", True, _
              59, Nothing, CType(vsCommandStatus. _
              vsCommandStatusSupported, Integer) + _
              CType(vsCommandStatus.vsCommandStatusEnabled,  _
              Integer), vsCommandStyle.vsCommandStylePictAndText, _
              vsCommandControlType.vsCommandControlTypeButton)
    
           command.AddControl(toolsPopup.CommandBar, 1)
        Catch argumentException As System.ArgumentException
        End Try
    End If
    

    在 Visual Studio 中載入 (連接) 增益集時,便會執行此程式碼。 它會判斷載入增益集時是否有使用 ext_cm_UISetup 的 ext_ConnectMode 值。 這就表示增益集是自安裝後第一次啟動。 若真是如此,便會使用 AddNamedCommand 方法,在 [工具] 功能表上建立增益集的命令。 如需詳細資訊,請參閱如何:新增和處理命令

  3. 將下列兩個程序加入至 Connect 類別。

    當命令的可用性更新時,會呼叫 QueryStatus 方法。 叫用命令時,則會呼叫 Exec 方法。

    Public Sub QueryStatus(ByVal commandName As String,  _
      ByVal neededText As vsCommandStatusTextWanted, ByRef status As _
      vsCommandStatus, ByRef commandText As Object) Implements _
      IDTCommandTarget.QueryStatus
        If neededText = vsCommandStatusTextWanted. _
          vsCommandStatusTextWantedNone Then
            If commandName = "MyAddin1.Connect.MyAddin1" Then
                status = CType(vsCommandStatus.vsCommandStatusEnabled _
                  + vsCommandStatus.vsCommandStatusSupported, _
                  vsCommandStatus)
            Else
                status = vsCommandStatus.vsCommandStatusUnsupported
            End If
        End If
    End Sub
    
    Public Sub Exec(ByVal commandName As String, ByVal executeOption _
      As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As _
      Object, ByRef handled As Boolean) Implements IDTCommandTarget.Exec
        handled = False
        If executeOption = vsCommandExecOption. _
          vsCommandExecOptionDoDefault Then
            If commandName = "MyAddin1.Connect.MyAddin1" Then
                handled = True
                Exit Sub
            End If
        End If
    End Sub
    

    每次您實作 IDTCommandTarget 時,都必須加入這兩個程序。 若要快速加入程序,可以從編輯器左上角的 [類別名稱] 下拉式清單方塊中選取 IDTCommandTarget。 再從右上角的 [方法名稱] 下拉式清單方塊中依序選取這兩個程序。 這時便會建立內含正確參數的必要空白程序,您可以在其中加入程式碼。

    當使用者按一下功能表命令時,會呼叫 Exec 程序,因此請將您那時候想要執行的程式碼插入其中。

請參閱

工作

如何:在工具功能表上公開增益集 (Visual C#)

如何:使用增益集管理員來控制增益集

如何:建立增益集

概念

Automation 物件模型圖表