- PR -

Visual Stuido 2008 アドインの作成

1
投稿者投稿内容
らりるれろ
会議室デビュー日: 2008/11/01
投稿数: 2
投稿日時: 2008-11-01 12:36
こんにちわ。
今Visual Studio 2008向けのアドインを作成してみています。
目標:「ソリューションエクスプローラ」の中でプロジェクトファイルの上で右クリックメニューに「TestButton」というボタンを追加したいです。
言語:C#

もう1日かけて、解決できなかったので、皆様の知恵をいただきたいです、よろしくお願いいたします。

下記のような実装コードを書いて、ボタンがちゃんと表示されますが、クリックイベントが反応しません
//OnConnection実装
public void OnConnection(... 省略...)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;

if(connectMode == ext_ConnectMode.ext_cm_UISetup)
{
CommandBar cmdbar = ((CommandBars)_applicationObject.CommandBars)["Project"];
CommandBarButton button = (CommandBarButton)cmdbar.Controls.Add(MsoControlType.msoControlButton, Type.Missing, Type.Missing, 1, true);
button.Caption = "TestButton";
button.OnAction = "'button_ClickOnAction'";
button.Click += new _CommandBarButtonEvents_ClickEventHandler(button_Click);
    }
}

//イベントの紐づけ
private void button_Click(CommandBarButton Ctrl, ref bool CancelDefault)
{
System.Windows.Forms.MessageBox.Show("test");
}

ちなみに、今私書いたソースコードを修正しなくても、別の方法でも構いませんので、どなた助けていただけませんか><

よろしくお願いいたします。
koyak
会議室デビュー日: 2008/12/06
投稿数: 2
投稿日時: 2008-12-06 21:30
初めまして。
koyakと申します。

既に一ヶ月以上経過してしまっていますが
ご容赦下さい。

らりるれろさんが作成したbuttonを
OnConnectionが定義されているクラス
(Connectクラス)にインスタンス変数として
持たせてみて下さい。
(CommandBarControl型の変数、またはそのリストで定義)

インスタンス変数として作成したコントロールを
保持していないと、表示はされるものの
イベント等が呼ばれなくなってしまうようです。

例)
public class Connect : IDTExtensibility2, IDTCommandTarget
{
private IList<CommandBarControl> _commandBarControls;
(中略)
  // ↓(らりるれろさんが実装しているOnConnectionメソッドの中)
button.Caption = "TestButton";
button.OnAction = "'button_ClickOnAction'";
button.Click += new _CommandBarButtonEvents_ClickEventHandler(button_Click);
_commandBarControls.Add(button);
(省略)
}

1

スキルアップ/キャリアアップ(JOB@IT)