2009-02-12 88 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