Home All Groups Group Topic Archive Search About

Event handler delegate as variable

Author
1 May 2006 7:57 AM
steve
Hi All

I have a program which creates buttons on a form on loading from data in a
database table and connects them to an event handler as follows...

btn = New Button

btn.Text = dr("buttontext").ToString

btn.Visible = True

btn.Dock = DockStyle.Fill

btn.BackColor = Color.FromKnownColor(KnownColor.InactiveCaptionText)

btn.Name = dr("buttonname").ToString

If dr("AddressOf") = "historyclick" Then

AddHandler btn.Click, AddressOf historyClick

ElseIf dr("AddressOf") = "pricelevelclick" Then

AddHandler btn.Click, AddressOf pricelevelClick

ElseIf dr("AddressOf") = "keyboardsclick" Then

AddHandler btn.Click, AddressOf keyboardsClick

end if

Is there any way to use a variable to link to the event handler delegate
instead of comparing the db field value as in the above code

e.g  AddHandler btn.Click, AddressOf dr("AddressOf")  (This doesn't work
obviously)



Regards

Steve

Author
1 May 2006 4:40 PM
Göran_Andersson
Yes, it's possible using reflection, but IMHO far too compex for
something trivial like this.

You can use a Select Case statement to make your code a bit more
managable. Something like this:

Select Case dr("AddressOf")
Case "historyclick": AddHandler btn.Click, AddressOf historyClick
Case "pricelevelclick": AddHandler btn.Click, AddressOf pricelevelClick
Case "keyboardsclick": AddHandler btn.Click, AddressOf keyboardsClick
End Select

steve wrote:
Show quoteHide quote
> Hi All
>
>  I have a program which creates buttons on a form on loading from data in a
> database table and connects them to an event handler as follows...
>
> btn = New Button
>
> btn.Text = dr("buttontext").ToString
>
> btn.Visible = True
>
> btn.Dock = DockStyle.Fill
>
> btn.BackColor = Color.FromKnownColor(KnownColor.InactiveCaptionText)
>
> btn.Name = dr("buttonname").ToString
>
> If dr("AddressOf") = "historyclick" Then
>
> AddHandler btn.Click, AddressOf historyClick
>
> ElseIf dr("AddressOf") = "pricelevelclick" Then
>
> AddHandler btn.Click, AddressOf pricelevelClick
>
> ElseIf dr("AddressOf") = "keyboardsclick" Then
>
> AddHandler btn.Click, AddressOf keyboardsClick
>
> end if
>
> Is there any way to use a variable to link to the event handler delegate
> instead of comparing the db field value as in the above code
>
> e.g  AddHandler btn.Click, AddressOf dr("AddressOf")  (This doesn't work
> obviously)
>
>
>
> Regards
>
> Steve
>
>