如何:在工具功能表上公開增益集 (Visual Basic)
.Visual Studio 增益集在 Visual Studio 2013 中已不適用。 您應該升級您的增益集至 VSPackage 擴充套件。 如需升級的詳細資訊,請參閱 常見問題集:將增益集轉換成 VSPackage 擴充功能。
當您使用 [增益集精靈] 建立增益集,並且選取將增益集顯示為命令的選項時,[工具] 功能表上就會預設顯示該命令。 但是,如果在建立增益集時略過此選項,只要再執行一次 [增益集精靈]、選取該選項,然後將現有的程式碼複製到新的增益集中就可以了。
如果無法執行上述程序,那麼下列程序也可以達到同樣的效果。
注意事項 |
---|
根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。使用 [一般開發設定] 開發了這些程序。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱Visual Studio 中的自訂開發設定。 |
若要在現有的增益集中加入功能表命令
請在增益集的 Connect 類別中,加入 Implements IDTCommandTarget。
這麼做可讓您存取建立命令所需的 IDTCommandTarget 命令介面。
在 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 方法,在 [工具] 功能表上建立增益集的命令。 如需詳細資訊,請參閱如何:新增和處理命令。
將下列兩個程序加入至 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 程序,因此請將您那時候想要執行的程式碼插入其中。