方法 : マクロで環境イベントを処理する
更新 : 2007 年 11 月
すべての新規マクロ プロジェクトには、マクロ IDE でのみ表示される EnvironmentEvents という名前のモジュールが含まれます。このテンプレート アイテムには、役に立つ定義済みイベント プロシージャが含まれており、マクロの中で実装できます。含まれているプロシージャは次のとおりです。
これらのイベント プロシージャは [クラス名] ボックスに表示され、イベントは [メソッド名] ボックスに表示されます。どちらのボックスも、コード エディタの上部にあります。
定義済みのイベント プロシージャをマクロに追加するには
マクロ IDE の [クラス ビュー] エクスプローラ ペインで、[EnvironmentEvents] ノードをダブルクリックし、マクロ エディタ ペインの [EnvironmentEvents] タブおよびドロップダウン メニューとして表示します。
[EnvironmentEvents] ドロップダウン メニューで、イベントの種類 ([TaskListEvents] など) をクリックします。選択したイベントの種類で利用できるイベント (タスク一覧イベントなど) が、[宣言] ボックスに表示されます。
[宣言] ドロップダウン メニューでイベント ([TaskAdded] など) をクリックし、そのイベント プロシージャをモジュールに追加します。
マクロにイベントが挿入されて、イベント プロシージャにコードを追加できるようになります。
CommandEvents などのイベントでは、[クラス名] ボックスにイベント プロシージャを追加することが必要になる場合があります。
新しいイベント プロシージャの追加
[クラス名] ボックスに新しいイベント プロシージャを追加するには
"Automatically generated code, do not modify" というラベルの付いた EnvironmentEvents モジュールの非表示領域の後に、次のようにイベントの宣言を入力します。
<System.ContextStaticAttribute()> Public WithEvents CommandEvents As EnvDTE.CommandEvents ' This procedure handles DTEEvents.OnMacrosRuntimeReset.
マクロを実行し直すたびに新しいイベント変数を初期化するように、OnMacrosRuntimeReset プロシージャを設定します。
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles _ DTEEvents.OnMacrosRuntimeReset CommandEvents = DTE.Events.CommandEvents End Sub
手順 2. の初期化プロシージャを完了する OnStartupComplete プロシージャを設定します。
Private Sub DTEEvents_OnStartupComplete() Handles_ DTEEvents.OnStartupComplete CommandEvents = DTE.Events.CommandEvents End Sub
イベントに応答するためのコードを追加します。この例では、コマンドを実行すると、発行されたコマンドについての詳細がこのプロシージャによってレポートされます。
Public Sub CommandEvents_AfterExecute(ByVal Guid As String, ByVal ID As Integer, ByVal CustomIn As Object, ByVal CustomOut as Object) Handles CommandEvents.AfterExecute MsgBox(DTE.Commands.Item(Guid, ID).Name) End Sub
新しく宣言したイベントを使用するには、先にイベントを初期化する必要があります。マクロの場合、新しいイベント変数の初期化は、OnMacrosRuntimeReset イベント プロシージャの中で行います。
マクロが読み込まれたり、アンロードされたりした場合など、マクロのランタイムがリセットされたときは、常にこのイベントが発生します。このイベントが発生すると、グローバル状態が失われます。つまり、グローバル変数の値は失われ、イベント ハンドラのフックは解除されて、イベントが発生したときに実行されていたコードは実行されなくなります。
マクロのランタイムがリセットされると、OnMacrosRuntimeReset イベントが発生します。このイベントを利用すると、マクロのランタイムがリセットされるたびに、変数とイベント ハンドラを自動的に再初期化できます。OnMacrosRuntimeReset でイベントの変数とハンドラを初期化することにより、マクロのランタイムがリセットされるたびに変数とハンドラの値を確実に初期化し、新しいイベント プロシージャを正しく動作させることができます。
参照
処理手順
方法 : マクロで COM および .NET Framework のコンポーネントを参照する