共用方式為


HOW TO:公開工具功能表上的增益集 (Visual C#)

更新:2007 年 11 月

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

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

注意事項:

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

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

  1. 將增益集的 Connect 類別 (Class) 和 OnConnection() 程序程式碼取代或變更為下列範例中所示:

    using Microsoft.VisualStudio.CommandBars;
    using System.Resources;
    using System.Reflection;
    using System.Globalization;
    
    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        if(connectMode == ext_ConnectMode.ext_cm_UISetup)
        {
            object []contextGUIDS = new object[] { };
            Commands2 commands = (Commands2)_applicationObject.Commands;
            string toolsMenuName;
    
            try
            {
                ResourceManager resourceManager = new     
                  ResourceManager("MyAddin1.CommandBar",  
                  Assembly.GetExecutingAssembly());
                CultureInfo cultureInfo = new 
                  System.Globalization.CultureInfo
                  (_applicationObject.LocaleID);
                string resourceName = String.Concat(cultureInfo.
                  TwoLetterISOLanguageName, "Tools");
                toolsMenuName = resourceManager.GetString(resourceName);
            }
            catch
            {
                toolsMenuName = "Tools";
            }
    
            CommandBar menuBarCommandBar = 
              ((CommandBars)_applicationObject.CommandBars)
              ["MenuBar"];
    
              CommandBarControl toolsControl = 
                menuBarCommandBar.Controls[toolsMenuName];
              CommandBarPopup toolsPopup = 
                (CommandBarPopup)toolsControl;
    
              try
              {
                  Command command = commands.AddNamedCommand2
                    (_addInInstance, "MyAddin1", "MyAddin1", "Executes  
                    the command for MyAddin1", true, 59, ref 
                    contextGUIDS, (int)vsCommandStatus.
                    vsCommandStatusSupported+(int)vsCommandStatus.
                    vsCommandStatusEnabled, (int)vsCommandStyle.
                    vsCommandStylePictAndText, vsCommandControlType.
                    vsCommandControlTypeButton);
    
                  if((command != null) && (toolsPopup != null))
                  {
                         command.AddControl(toolsPopup.CommandBar, 1);
                  }
            }
            catch(System.ArgumentException)
            {
            }
        }
    }
    
  2. 加入下列這兩個必要程序 (QueryStatusExec):

    public void QueryStatus(string commandName, 
      vsCommandStatusTextWanted neededText, ref vsCommandStatus status, 
      ref object commandText)
    {
        if(neededText == 
          vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
        {
            if(commandName == "MyAddin1.Connect.MyAddin1")
            {
                status = (vsCommandStatus)vsCommandStatus.
                  vsCommandStatusSupported|vsCommandStatus.
                  vsCommandStatusEnabled;
                return;
            }
        }
    }
    
    public void Exec(string commandName, vsCommandExecOption 
      executeOption, ref object varIn, ref object varOut, ref bool 
      handled)
    {
        handled = false;
        if(executeOption ==  
          vsCommandExecOption.vsCommandExecOptionDoDefault)
        {
            if(commandName == "MyAddin1.Connect.MyAddin1")
            {
                handled = true;
                    System.Windows.Forms.MessageBox.
                      Show("add-in running.");
                return;
            }
        }
    }
    

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

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

請參閱

工作

HOW TO:公開工具功能表上的增益集 (Visual Basic)

HOW TO:以增益集管理員控制增益集

HOW TO:建立增益集

概念

Automation 物件模型圖表