実行時に作成され、フォームに追加される WebBrowser コントロールがあります。
このコントロールを実行時にイベントを処理できるサブルーチンに接続するにはどうすればよいですか?
AddHandlerを使用する
例えば
AddHandler Obj.Ev_Event, AddressOf EventHandler
そして、あなたがそれを取り除きたいとき(そして、使い終わったらそれを取り除くべきです)
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
あなたの場合、次のようなものがあるかもしれません
Dim web as New WebBrowser()
AddHandler web.DocumentCompleted, AddressOf HandleDocumentCompleted
HandleDocumentCompleted というイベント ハンドラーを作成したとします。
必要に応じて、 Web ブラウザーを宣言するときにWithEventsキーワードを使用することもできます。ドキュメントを参照してください。
使用する代わりにAddHandler
、VB の宣言型イベント構文を使用できます。これを使用するには、キーワードを使用してコントロールを (プライベート メンバーとして)宣言します。WithEvents
次に、Handles
キーワードをメソッドで使用して、適切なイベントを処理できます。
Private WithEvents m_WebBrowser As WebBrowser
Private Sub WebBrowser_Navigate(ByVal sender As Object, ByVal e As WebBrowserNavigatedEventArgs) Handles m_WebBrowser.Navigate
MsgBox("Hi there")
End Sub
Private Sub SomeActionThatCreatesTheControl()
m_WebBrowser = New WebBrowser()
End Sub
この方法には、主に次の 2 つの利点があります。
RemoveHandler
。
Private Sub WebBrowser1_Navigate(ByVal sender As Object, ByVal e As WebBrowserNavigatedEventArgs)
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
RemoveHandler WebBrowser1.Navigated, AddressOf WebBrowser1_Navigate
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler WebBrowser1.Navigated, AddressOf WebBrowser1_Navigate
End Sub
例
AddHandler SharedTimer.Tick、AddressOf SharedTimer_Tick
'特定の状況でコントロールを検出し、ハンドラーを追加するメソッドがあります。
'これは単純化された例です。
実行時にハンドラーを渡すことは可能ですか?
Private Sub Example(byval ph as Placeholder)
for each ctrl as control in ph.controls
if typeof (ctrl) is textbox then
dim cb as checkbox = ctrl
AddHandler cb.DataBinding, AddressOf MyHandler
end if
next
end sub
「もっとこういうの作ろうと思って…
Private Sub Example(byval ph as Placeholder, **byref method as delagate**)
for each ctrl as control in ph.controls
if typeof (ctrl) is textbox then
dim cb as checkbox = ctrl
AddHandler cb.DataBinding, **method**
end if
next
end sub
私が抱えている問題は、メソッドを呼び出すことです。これは動作しません:
Example(myPlaceholder, addressof MyRuntimeHandler)
これらのことを行うために Addhandler ステートメントを使用できます。このように、実行時に任意のイベント ハンドラーを Web ブラウザーに追加できます。
AddHandler WebBrowser1.xEvent、AddressOf WebBrowser1EventHandler
同様に、次のようにイベント ハンドラーからイベントを切断する RemoveHandler を使用できます。
RemoveHandler WebBrowser1.XEvent、AddressOf WebBrowser1EventHandler