方法: ツール メニューにアドインを表示する (Visual C#)
アドイン ウィザードを使用してアドインを作成し、作成したアドインをコマンドとして表示するオプションを選択すると、そのコマンドは既定で [ツール] メニューに表示されます。アドインの作成時にこのオプションを選択しなかった場合でも、再度アドイン ウィザードを実行するだけで、このオプションを選択し、既存のコードを新しいアドインにコピーできます。
この操作を行うことができない場合、次に示す手順によっても同じ結果が得られます。
[!メモ]
実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。
メニュー コマンドを既存のアドインに追加するには
Connect クラスが含まれているファイルに、次の using ステートメントを追加します。
using Microsoft.VisualStudio.CommandBars; using System.Resources; using System.Reflection; using System.Globalization; using System.Windows.Forms;
IDTCommandTarget を実装するように Connect のクラス宣言を変更します。
OnConnection() プロシージャ コードを次のコードで置き換えるか、変更します。
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 つの必要なプロシージャ 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)