2

実行時に作成され、フォームに追加される WebBrowser コントロールがあります。

このコントロールを実行時にイベントを処理できるサブルーチンに接続するにはどうすればよいですか?

4

7 に答える 7

9

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キーワードを使用することもできます。ドキュメントを参照してください。

于 2009-02-12T18:49:34.800 に答える
2

使用する代わりに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
  • すべてのイベント ハンドラーを手動で接続する必要はありません。これは自動的に行われます。
于 2009-02-12T19:08:49.450 に答える
1
  • AddHandler と RemoveHandler を使用する必要があります。
  • AddHandler を使用して手動でイベントを追加する場合は、RemoveHandler を使用して (適切な場所で) イベントを削除してください。
  • 「AddHandler NameOfControl」と入力します。インテリセンスを介して利用可能なイベントのリストを提供します。
  • インテリセンス、ドキュメント (または「エラー リスト」) からも、イベント ハンドラーの「署名」が得られます。

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
于 2009-02-12T18:59:08.630 に答える
0

AddHandler SharedTimer.Tick、AddressOf SharedTimer_Tick

于 2010-05-12T14:29:13.450 に答える
0

'特定の状況でコントロールを検出し、ハンドラーを追加するメソッドがあります。
'これは単純化された例です。
実行時にハンドラーを渡すことは可能ですか?

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)
于 2010-06-18T11:43:31.960 に答える
0

これらのことを行うために Addhandler ステートメントを使用できます。このように、実行時に任意のイベント ハンドラーを Web ブラウザーに追加できます。

AddHandler WebBrowser1.xEvent、AddressOf WebBrowser1EventHandler

同様に、次のようにイベント ハンドラーからイベントを切断する RemoveHandler を使用できます。

RemoveHandler WebBrowser1.XEvent、AddressOf WebBrowser1EventHandler
于 2011-11-19T11:19:54.083 に答える
0

これについては、フォーム デザイナーで生成されたコードを調べることで学びました。そこから例の 1 つをコピーします。周りを見回すと、実行時のコントロールの設定に関するその他の重要なことがわかるかもしれません。

C# では、パラメーターとして関数を持つクラスのイベント メンバーで += を使用していますが、VB.net を自分でチェックするのに便利ではありません...申し訳ありません。

編集:ダニエル L の回答でよく説明されている AddHandler であり、 msdn で詳細に説明されてます

于 2009-02-12T18:53:14.497 に答える