方法 : マクロで特定の種類のプロジェクト用のイベント ハンドラを作成する

更新 : 2007 年 11 月

すべてのマクロ プロジェクトに含まれている EnvironmentEvents テンプレートには、宣言済みのイベント ハンドラが数多く含まれています。これらのイベント ハンドラは、ウィンドウを閉じるなど、多くの環境イベントに応答するために実装できます。実装が用意されると、汎用機能拡張イベント ハンドラは、Visual Studio 統合開発環境 (IDE: Integrated Development Environment) で実装を実行するたびに、指定したイベントを自動的に受け取ります。詳細については、「方法 : マクロで環境イベントを処理する」を参照してください。

また、独自の IDE イベント ハンドラを EnvironmentEvents テンプレートに追加することもできます。イベント変数を宣言して、その変数にイベント ハンドラ コードを指定し、OnMacrosRuntimeReset ハンドラおよび OnStartupComplete ハンドラを追加することで、Visual Studio IDE でのイベントの受け取りを自動化します。

この例では、Visual C#、Visual Basic、または Visual J# のプロジェクトに参照を追加した場合に発生する ReferencesEvents イベント ハンドラを追加します。

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

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

VSLangProj イベント ハンドラをマクロに追加するには

  1. マクロ IDE で、[プロジェクト] メニューの [参照の追加] をクリックします。

  2. [参照の追加] ダイアログ ボックスで、[VSLangProj] を選択します。[追加] をクリックし、[OK] をクリックします。

  3. マクロ IDE のクラス ビュー エクスプローラ ペインで、[MyMacros] を展開し、[EnvironmentEvents] をダブルクリックしてマクロ エディタ ペインに表示します。

  4. EnvironmentEvents モジュールの先頭に、次の宣言を追加します。

    Imports VSLangProj
    
  5. "Automatically generated code, do not modify" というラベルの付いた EnvironmentEvents モジュールの非表示領域の後に、次のようにイベントの宣言を入力します。

    <System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
    

    この宣言では、ReferencesEvents およびそのメソッドを、マクロ IDE コード エディタの [クラス名] ボックスの一覧と [メソッド名] ボックスの一覧に追加します。

  6. [クラス名] ボックスの一覧を使用して DTEEvents を選択し、[メソッド名] ボックスの一覧を使用して OnMacrosRuntimeReset および OnStartupComplete を選択します。

    これにより、これら 2 つのイベントに対してイベント ハンドラが作成されます。これらのイベント ハンドラは、Visual Studio IDE でイベントが発生するたびに ReferencesEvents ハンドラでそのイベントを自動的に受け取るために必要です。

  7. 次に示すように、EnvironmentEvents.refEvents キャストを追加して、イベント ハンドラを変更します。参照を Visual Basic プロジェクトまたは Visual J# プロジェクトに追加した場合にイベントを受け取るには、CSharpReferencesEvents という文字列を、それぞれ VBReferencesEvents または VJSharpReferencesEvents で置き換えます。

    Public Sub DTEEvents_OnMacrosRuntimeReset() Handles_
     DTEEvents.OnMacrosRuntimeReset
            EnvironmentEvents.refEvents_        =CType(DTE.Events.GetObject("CSharpReferencesEvents")_        , ReferencesEvents)
    End Sub
    

    および

    Private Sub DTEEvents_OnStartupComplete() Handles_
     DTEEvents.OnStartupComplete
            EnvironmentEvents.refEvents_        = CType(DTE.Events.GetObject("CSharpReferencesEvents")_        , ReferencesEvents)
    End Sub
    
  8. 最後に、次のコードを EnvironmentEvents モジュールに貼り付けるか、[クラス名] ボックスの一覧の [refEvents] および [メソッド名] ボックスの一覧の [ReferenceAdded] を選択して、イベント ハンドラを作成します。次に示すように、イベント ハンドラに MsgBox(pReference.Name & " was added to the project.") 行を追加します。

    Public Sub refEvents_ReferenceAdded(ByVal pReference As VSLangProj.Reference) Handles refEvents.ReferenceAdded
            MsgBox(pReference.Name & " was added to the project.")
    End Sub
    
  9. イベント ハンドラをテストするには、任意の種類の新しい Visual C# プロジェクトを作成します。

    プロジェクト テンプレートに自動的に追加される参照ごとに、メッセージ ボックスが表示されます。

使用例

このコードでは、完全な例を示します。次のコードをマクロ プロジェクトの EnvironmentEvents モジュールに貼り付けることができます。

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

このイベント ハンドラを追加すると、指定したプロジェクトの種類に参照が追加されるたびにこのイベント ハンドラが発生します。参照が追加されるたびに発生するのを回避するには、このコードをコメント アウトします。

<System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles_
 DTEEvents.OnMacrosRuntimeReset
        EnvironmentEvents.refEvents= _        CType(DTE.Events.GetObject("CSharpReferencesEvents")_        , VSLangProj.ReferencesEvents)
End Sub
Private Sub DTEEvents_OnStartupComplete() Handles_
 DTEEvents.OnStartupComplete
        EnvironmentEvents.refEvents = _        CType(DTE.Events.GetObject("CSharpReferencesEvents")_        , VSLangProj.ReferencesEvents)
End Sub
Public Sub refEvents_ReferenceAdded(ByVal pReference As VSLangProj.Reference) Handles refEvents.ReferenceAdded
        MsgBox(pReference.Name & " was added to the project.")
End Sub

参照

処理手順

方法 : マクロでイベントを処理する

方法 : オートメーション イベントを処理する (Visual Basic)

方法 : オートメーション イベントを処理する (Visual C#)

その他の技術情報

イベントへの応答 (Visual Basic および Visual C# プロジェクト)

オートメーション イベントへの応答