VisualStudio2008のアドイン作りに当たって砕けてみた1
VisualStudio2008のstandardエディションを手に入れたので
折角だからとアドインをいじっています。
この記事では
「コードエディタの右クリックメニューを一つ追加する」
を目標として自分がやってみたことを書いていきたいと思います。
言語はC#を使っています。
以下のやり方で進めていったところ、
コードエディタ上で右クリック→選択→メッセージの表示
というところまで行けました。
- 「Creating Visual Studio Add-Ins」
というページに書いてあることを参考にアドインプロジェクトを作成する。 - プロジェクトに生成されているConnectクラスを開く
- インスタンス変数としてCommandBarControlのリストを定義
(ここでは_buildControlsという変数名で定義) - Connect#OnConnectionメソッドから最初のif文の中身を一度削除。
- if文の中に以下のコードを追加する。
10行目で設定しているイベントは
CommandBarButton newControl;
try {
CommandBar contextMenuCommandBar =
((CommandBars)_applicationObject.CommandBars)["Code Window"];
newControl = (CommandBarButton)contextMenuCommandBar.Controls.Add(
MsoControlType.msoControlButton,
Type.Missing, Type.Missing, Type.Missing, false);
newControl.Visible = true;
newControl.Caption = "NewButton!!";
newControl.Click += newControl_Click;
_buildControls.Add(newControl); // ※
}
catch(System.Exception ex){
// ログに例外情報を出力
throw;
}
追加した「NewButton!!」がクリックされると「Hello,world !!」
というメッセージを表示するものです。
上記の修正を行ってデバッグを動かすと・・・
コードエディタ上で右クリックすると上記メニューが表示されます。
一番下に追加されている「NewButton!!」を選択すると・・・
無事追加したClickイベントが動きました。
※アドインではCommandBar#Controls.Addで追加したコントロールは
ローカル変数に近い(と書くと語弊があるかもしれませんが)扱いらしく、
「_buildControls.Add(newControl);」のような形で
インスタンス変数として保持してやらないと
表示上は項目が追加されてもイベントハンドラが呼ばれなくなります。
アドインについて調べていて実感したのは
「書籍にもネット上にもいまいち資料が少ない!!
(あってもこの記事のように"ちょっと試してみた"くらいのものが多い)」
ということ。
本格的にアドインを作成する場合はネットなどの情報を
あてにするよりもVisualStudioのアドインを提供している
オープンソース(NMavenやNUnitなど?)コードを参考にしてみるのが
一番の近道なのかもしれません。
- 参考
- Creating Visual Studio Add-Ins
- CommandBarControls.Add Method
(Officeアドインの説明ですが、VisualStudioの同名メソッドも同様の仕組のようです) - VSの右クリックメニューを拡張する
- Visual Studio Add-Inのリファレンス
- 色々検索して偶然引っかかったNMavenのソースコード