Passing AddressOf to a function in VB.NET to use AddHandler

DieSlower picture DieSlower · May 24, 2013 · Viewed 35.7k times · Source

I need to pass a reference of a function to another function in VB.NET. How can this be done?

My function needs to use AddHandler internally, for which I need to pass it a handling function. My code below obviously does not work, but it conveys the idea of what I need.

Public Function CreateMenuItem(ByVal Name As String, ByRef Func As AddressOf ) As MenuItem
   Dim item As New MenuItem

   item.Name = Name
   'item.  other options

   AddHandler item.Click, AddressOf Func

   Return item
End Function

Is there another way to do this? The AddHandler needs to be set to a passed parameter in a function somehow...

Answer

Fuzhou Hu picture Fuzhou Hu · May 24, 2013

A function delegate is just what you need to do this. First you need to define the delegate somewhere in the class. Change the signature to fit your event of course.

Public Delegate Sub MyDelegate(sender As System.Object, e As System.EventArgs)

Your function will take the delegate as an argument.

Public Function CreateMenuItem(ByVal Name As String, del As MyDelegate) As MenuItem
  ''''
  AddHandler item.Click, del
  ''''
End Function

Public Sub MyEventHandler(sender As System.Object, e As System.EventArgs)
  ''''
End Sub

And here's how you call the function:

CreateMenuItem(myString, AddressOf MyEventHandler)