次の方法で共有


方法 : ツール メニューにアドインを表示する (Visual C#)

更新 : 2007 年 11 月

アドイン ウィザードを使用してアドインを作成し、作成したアドインをコマンドとして表示するオプションを選択すると、そのコマンドは既定で [ツール] メニューに表示されます。アドインの作成時にこのオプションを選択しなかった場合でも、再度アドイン ウィザードを実行するだけで、このオプションを選択し、既存のコードを新しいアドインにコピーできます。

この操作を行うことができない場合、次に示す手順によっても同じ結果が得られます。

ms165625.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

メニュー コマンドを既存のアドインに追加するには

  1. アドインの Connect クラスおよび 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. 次に示す 2 つの必要なプロシージャ QueryStatus および Exec を追加します。

    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 を実装する際は必ずこの 2 つのプロシージャを追加する必要があります。この操作を簡単に行うには、エディタの左上隅にある [クラス名] ボックスの一覧の [IDTCommandTarget] を選択します。次に、右上隅にある [メソッド名] ボックスの一覧のプロシージャを 1 つずつ順に選択します。これにより、必要な空のプロシージャが、適切なパラメータが指定された状態で 2 つ作成されます。これに後からコードを追加できます。

    Exec プロシージャは、ユーザーがメニュー コマンドをクリックしたときに呼び出されます。そのため、このプロシージャにはそのときに実行するコードを挿入してください。

参照

処理手順

方法 : ツール メニューにアドインを表示する (Visual Basic)

方法 : アドイン マネージャを使用してアドインを制御する

方法 : アドインを作成する

概念

オートメーション オブジェクト モデルの階層図