方法 : Web 参照イベントを処理する (Visual Basic)
VSLangProj および VSLangProj80 で定義された環境イベントは、Visual C# プロジェクトおよび Visual Basic プロジェクトに固有です。VSLangProjWebReferencesEvents は、Visual Studio 2005 の新しい型です。このイベントは、Visual Basic プロジェクトまたは Visual C# プロジェクトで Web 参照が追加されたり削除されたりしたときや、Visual Basic プロジェクトまたは Visual C# プロジェクトで Web 参照のプロパティが変更されたときに発生します。
ここでは、Visual Basic で VSLangProjWebReferencesEvents プロパティを使用して、特定のプロジェクトのイベント処理メソッドを関連付けます。
[!メモ]
実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。
Visual Basic を使用して Web 参照に関連したイベントを処理するには
Visual Basic で Visual Studio のアドイン プロジェクトを作成します。
[プロジェクト] メニューの [参照の追加] をクリックし、[.NET] タブをクリックします。次に、最初の VSLangProj および VSLangProj80 を選択して、[OK] をクリックします。
Connect.vb ファイルの先頭に Imports VSLangProj および Imports VSLangProj80 を追加します。
Connect クラスで、VSLangProjWebReferencesEvents オブジェクトを処理する変数を初期化します。
Public Class Connect Implements IDTExtensibility2 Dim _applicationObject As DTE2 Dim _addInInstance As AddIn Public WithEvents webRefEvents As _ VSLangProj80.VSLangProjWebReferencesEvents
この例では、変数に webRefEvents という名前を付けています。
オートメーション モデルのオブジェクトは、それぞれ、プロジェクトに固有のさまざまなイベントと関連付けられています。たとえば、ImportsEvents は、Imports コレクションに対しインポートの追加または削除を行ったときに発生します。また、BuildManagerEvents は、カスタム ツールの出力からビルドされた一時的なアセンブリに関連するイベントを表します。BuildManager オブジェクトの詳細については、「BuildManager オブジェクトの概要」を参照してください。プロジェクトの種類ごとの詳細なイベント一覧については、「イベント オブジェクト (プロジェクトの種類に固有)」を参照してください。一般的なオートメーション イベントの一覧については、「オートメーション イベント オブジェクト」を参照してください。
次のメソッド呼び出しを OnConnection メソッドに追加します。
Public Sub OnConnection(ByVal application As Object, _ ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _ ByRef custom As Array) Implements IDTExtensibility2.OnConnection _applicationObject = CType(application, DTE2) _addInInstance = CType(addInInst, AddIn) WebReferenceEventsSample(_applicationObject) End Sub
WebReferenceEventsSample メソッドの宣言を OnConnection メソッドの直後に追加します。
Sub WebReferenceEventsSample(ByVal dte As DTE2) End Sub
次の宣言を WebReferenceEventsSample メソッドの先頭に追加します。
Dim soln As Solution2 = CType(_applicationObject.Solution, Solution2) Dim proj As Project Dim vsproj As VSProject2 Dim webServiceRef As String proj = soln.Projects.Item(1)
proj = soln.Projects.Item(1) という宣言により、この例を実行するときに、プロジェクトが Visual Studio の統合開発環境 (IDE: Integrated Development Environment) で開かれることが要求されます。つまり、プロジェクトは、Visual Basic プロジェクトまたは Visual C# プロジェクトである必要があります。これは、VSLangProjWebReferencesEvents オブジェクトがこれらのプロジェクトの種類に固有のオブジェクトであるためです。
WebReferenceEventsSample メソッドに次のコードを追加して、プロジェクトを VSProject2 オブジェクトにキャストします。
' Cast the project to a VSProject2. vsproj = CType(proj.Object, VSProject2)
同様に、WebReferenceEventsSample メソッドで、オートメーション モデルからイベント オブジェクトを取得します。
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents
イベント ハンドラーを関連付けます。
AddHandler webRefEvents.OnAfterWebReferenceAdded, _ AddressOf WebReferenceAdded AddHandler webRefEvents.OnBeforeWebReferenceRemoved, _ AddressOf WebReferenceRemoved AddHandler webRefEvents.OnWebReferenceChanged, _ AddressOf WebReferenceChanged
プロジェクトに Web 参照を追加します。
' Create a Web references folder. MsgBox("Creating a Web references folder.", MsgBoxStyle.Information) vsproj.CreateWebReferencesFolder() ' Add a Web reference to the folder. ' Replace the "<web reference>" with an actual Web service URL. MsgBox("Adding a Web reference.", MsgBoxStyle.Information) webServiceRef = "<web reference>" vsproj.AddWebReference(webServiceRef)
プログラムを使って、Web サービスに対する参照をプロジェクトに追加するには、コード中のプレースホルダー テキスト <web reference> を、実際の Web サービスの URL に置き換える必要があります。
このステップにより、アドインを実行したときに OnAfterWebReferenceAdded イベントが生成されます。
イベント オブジェクトに関連する各イベントにプロシージャを追加します。
Sub WebReferenceRemoved(ByVal removedRef As Object) MsgBox("A Web reference was removed.") End Sub Sub WebReferenceChanged(ByVal changedRef As Object) MsgBox("A Web reference was changed.") End Sub Sub WebReferenceAdded(ByVal addedRef As Object) MsgBox("A Web reference was added.") End Sub
最終的に、アドインの終了後もウィンドウに関連するイベントを引き続き監視して、Visual Studio によってシステムの処理速度が下がらないようにするには、イベント処理を無効にします。Visual Basic でイベント処理を無効にするには、イベント ハンドラーを Nothing に設定します。
Public Sub OnDisconnection(ByVal RemoveMode As_ Extensibility.ext_DisconnectMode, ByRef custom As System.Array)_ Implements Extensibility.IDTExtensibility2.OnDisconnection webRefEvents = Nothing End Sub
完成したコードについては、このトピックの「使用例」を参照してください。
アドインをビルドするには、[ビルド] メニューの [ソリューションのビルド] をクリックします。
Visual Studio 統合開発環境 (IDE) で、Visual C# プロジェクトまたは Visual Basic のプロジェクトを開きます。
[ツール] メニューの [アドイン マネージャー] をクリックし、[アドイン マネージャー] ダイアログ ボックスからアドインを選択します。[OK] をクリックしてアドインを実行します。
VSLangProjWebReferencesEvents のイベント処理をテストするには
この例では、Web サービスに対する参照をプログラムから追加しているため、OnAfterWebReferenceAdded イベントは、アドインの実行時に発生します。
OnWebReferenceChanged イベントをテストするには
ソリューション エクスプローラーで [Web References] フォルダーを展開します。
Web サービスを選択し、それを右クリックします。
ドロップダウン メニューの [プロパティ] を選択します。
[プロパティ] ウィンドウで、[URL の動作] ボックスの一覧で [スタティック] を選択して、URL の動作を動的から静的に変更します。
OnBeforeWebReferenceRemoved イベントをテストするには
Web サービスを選択し、それを右クリックします。
ドロップダウン メニューの [削除] を選択します。
使用例
Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Public Class Connect
Implements IDTExtensibility2
Dim _applicationObject As DTE2
Dim _addInInstance As AddIn
Public WithEvents webRefEvents As _
VSLangProj80.VSLangProjWebReferencesEvents
Public Sub New()
End Sub
Public Sub OnConnection(ByVal application As Object, _
ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object _
, ByRef custom As Array) Implements IDTExtensibility2.OnConnection
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
WebReferenceEventsSample(_applicationObject)
End Sub
Sub WebReferenceEventsSample(ByVal dte As DTE2)
Try
Dim soln As Solution2 = CType(_applicationObject.Solution _
, Solution2)
Dim proj As Project
Dim vsproj As VSProject2
Dim webServiceRef As String
proj = soln.Projects.Item(1)
' Cast the project to a VSProject2.
vsproj = CType(proj.Object, VSProject2)
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents
AddHandler webRefEvents.OnAfterWebReferenceAdded, _
AddressOf WebReferenceAdded
AddHandler webRefEvents.OnBeforeWebReferenceRemoved, _
AddressOf WebReferenceRemoved
AddHandler webRefEvents.OnWebReferenceChanged, _
AddressOf WebReferenceChanged
' Create a Web references folder.
MsgBox("Creating a Web references folder." _
, MsgBoxStyle.Information)
vsproj.CreateWebReferencesFolder()
' Add a Web reference to the folder.
' Replace the place holder <web reference> with
' a Web service URL.
MsgBox("Adding a Web reference.", MsgBoxStyle.Information)
webServiceRef = "<web reference>"
vsproj.AddWebReference(webServiceRef)
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
Sub WebReferenceRemoved(ByVal removedRef As Object)
MsgBox("A Web reference was removed.")
End Sub
Sub WebReferenceChanged(ByVal changedRef As Object)
MsgBox("A Web reference was changed.")
End Sub
Sub WebReferenceAdded(ByVal addedRef As Object)
MsgBox("A Web reference was added.")
End Sub
Public Sub OnDisconnection(ByVal disconnectMode As _
ext_DisconnectMode, ByRef custom As Array) Implements _
IDTExtensibility2.OnDisconnection
' Turns off Web reference event handling when the
' add-in shuts down.
webRefEvents = Nothing
End Sub
Public Sub OnAddInsUpdate(ByRef custom As Array) _
Implements IDTExtensibility2.OnAddInsUpdate
End Sub
Public Sub OnStartupComplete(ByRef custom As Array) _
Implements IDTExtensibility2.OnStartupComplete
End Sub
Public Sub OnBeginShutdown(ByRef custom As Array) _
Implements IDTExtensibility2.OnBeginShutdown
End Sub
End Class
コードのコンパイル
このコードをコンパイルするには、Visual Basic で新しい Visual Studio アドイン プロジェクトを作成し、Connect クラスのコードを例のコードに置き換えます。アドインの実行方法については、「方法: アドイン マネージャーを使用してアドインを制御する」を参照してください。
参照
処理手順
方法 : Web 参照イベントを処理する (Visual C#)