次の方法で共有


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

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

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

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

注意

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

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 プロジェクトに追加されたときにイベントを受け取るには、CSharpReferencesEvents という文字列を VBReferencesEvents に置き換えます。

    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 モジュールに貼り付けることができます。

注意

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

<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# プロジェクト)

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