16,721
社区成员




Public Class AddMenuBarHelperObject
Public Event Clicked As EventHandler
Public FormName As String
Public Sub AddMenu()
............................
RaiseEvent Clicked(me, ...)
............................
End Sub
End Class
当然上述代码中的所有的委托类型都是可以自定义的,这里写 EventHandler 只是示例。Public Class AddMenuBarHelperObject
Public Event Clicked()
Public FormName As String
Public Sub AddMenu()
............................
RaiseEvent Clicked(me, ...)
............................
End Sub
End Class
这样,也是可以从外部注册事件委托的。
Private Sub AddMenuBar(abc as EventHandler)
...........
NewAddMenuBar.MenuStrip.Items.Add(l_txt, Nothing, abc).Name = l_click
它不需要知道delegate具体是什么,只有调用它的代码才需要知道:AddMenuBar(AddressOf Form1.Menu_Click)
Public Class AddMenuBarHelperObject
Public Event Clicked As EventHandler
Public FormName As String
Public Sub AddMenu()
............................
NewAddMenuBar.MenuStrip.Items.Add(l_txt, Nothing, AddressOf abc).Name = l_click
............................
End Sub
Sub abc(sender As Object, e As EventArgs)
RaiseEvent Clicked(sender, e)
End Sub
End Class
这也就是用“class本地”的一个abc作为中间代理,对外只暴露一个标准的事件机制,从而实现从过程化转变为对象化的定义风格。