方法 : マクロで特定の種類のプロジェクト用のイベント ハンドラーを作成する
すべてのマクロ プロジェクトに含まれている EnvironmentEvents テンプレートには、宣言済みのイベント ハンドラーが数多く含まれています。 これらのイベント ハンドラーは、ウィンドウを閉じるなど、多くの環境イベントに応答するために実装できます。 実装が提供されると、汎用機能拡張イベント ハンドラーは、指定したイベントが Visual Studio 統合開発環境 (IDE: Integrated Development Environment) で発生するたびに、それを自動的に受け取ります。 詳細については、「方法: マクロで環境イベントを処理する」を参照してください。
また、独自の IDE イベント ハンドラーを EnvironmentEvents テンプレートに追加することもできます。 イベント変数を宣言して、その変数にイベント ハンドラー コードを指定し、OnMacrosRuntimeReset ハンドラーおよび OnStartupComplete ハンドラーを追加することで、Visual Studio IDE でのイベントの受け取りを自動化します。
この例では、Visual C# プロジェクトまたは Visual Basic プロジェクトに参照を追加した場合に発生する ReferencesEvents イベント ハンドラーを追加します。
注意
実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。 ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。 設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。 詳細については、「設定の操作」を参照してください。
VSLangProj イベント ハンドラーをマクロに追加するには
マクロ IDE で、[プロジェクト] メニューの [参照の追加] をクリックします。
[参照の追加] ダイアログ ボックスで、[VSLangProj] を選択します。[追加] をクリックし、[OK] をクリックします。
マクロ IDE のクラス ビュー エクスプローラー ペインで、[MyMacros] を展開し、[EnvironmentEvents] をダブルクリックしてマクロ エディター ペインに表示します。
EnvironmentEvents モジュールの先頭に、次の宣言を追加します。
Imports VSLangProj
"Automatically generated code, do not modify" というラベルの付いた EnvironmentEvents モジュールの非表示領域の後に、次のようにイベントの宣言を入力します。
<System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
この宣言では、ReferencesEvents およびそのメソッドを、マクロ IDE コード エディターの [クラス名] ボックスの一覧と [メソッド名] ボックスの一覧に追加します。
[クラス名] ボックスの一覧を使用して DTEEvents を選択し、[メソッド名] ボックスの一覧を使用して OnMacrosRuntimeReset および OnStartupComplete を選択します。
これにより、これら 2 つのイベントに対してイベント ハンドラーが作成されます。 これらのイベント ハンドラーは、Visual Studio IDE でイベントが発生するたびに ReferencesEvents ハンドラーがそのイベントを自動的に受け取るために必要です。
次に示すように、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
最後に、次のコードを 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
イベント ハンドラーをテストするには、任意の種類の新しい 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#)