2009-02-12 89 views

回答

8

使用AddHandler

例如,

AddHandler Obj.Ev_Event, AddressOf EventHandler 

,當你想擺脫它(你應該擺脫它,當你使用它大功告成)

RemoveHandler Obj.Ev_Event, AddressOf EventHandler 
你的情況

,你可能會碰到這樣的

Dim web as New WebBrowser() 
AddHandler web.DocumentCompleted, AddressOf HandleDocumentCompleted 

假設你創建了一個名爲HandleDocumentCompleted

的事件處理程序根據你的需要,你可以一當你聲明你的網頁瀏覽器時,也使用WithEvents關鍵字;請參閱documentation

0

我通過檢查表單設計器生成的代碼瞭解了這一點。複製其中的一個示例,如果您環顧四周,可能會了解有關在運行時設置控件的其他有價值的信息。

在C#中,它以+ =完成,在一個以函數爲參數的類的事件成員上,但我沒有VB.net方便地檢查自己...對不起。

編輯:它的AddHandler正如Daniel L在他的回答中所描述的那樣,並且在msdn處詳細描述。

1
  • 您將需要使用AddHandler和RemoveHandler。
  • 如果您通過AddHandler手動添加事件,請務必使用RemoveHandler將其刪除(在適當的位置)。
  • 輸入「AddHandler NameOfControl」。將通過intellisense列出可用事件。
  • 智能感知,文檔(或「錯誤列表」)也會爲您提供事件處理程序的「簽名」。

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 
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 

主要有兩個優點這種方法:

  • 無需RemoveHandler
  • 無需電線手動處理所有事件處理程序:這是自動完成的。
0

的AddHandler SharedTimer.Tick,AddressOf SharedTimer_Tick

+0

添加更多的相關信息支持你的答案,而不是一個班輪.... – bonCodigo 2012-12-22 20:50:09

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) 
0

您可以使用Addhandler語句來執行這些操作。 您可以在運行時添加任何事件處理程序的網頁瀏覽器這樣

AddHandler WebBrowser1.xEvent, AddressOf WebBrowser1EventHandler

,同樣可以使用RemoveHandler,從事件處理程序像這樣斷開事件:

RemoveHandler WebBrowser1.XEvent, AddressOf WebBrowser1EventHandler