Event handler delegate as variable

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • steve

    #1

    Event handler delegate as variable

    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.FromKnown Color(KnownColo r.InactiveCapti onText)

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

    If dr("AddressOf" ) = "historycli ck" Then

    AddHandler btn.Click, AddressOf historyClick

    ElseIf dr("AddressOf" ) = "pricelevelclic k" 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


  • Göran Andersson

    #2
    Re: Event handler delegate as variable

    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 "historycli ck": AddHandler btn.Click, AddressOf historyClick
    Case "pricelevelclic k": AddHandler btn.Click, AddressOf pricelevelClick
    Case "keyboardsclick ": AddHandler btn.Click, AddressOf keyboardsClick
    End Select

    steve wrote:[color=blue]
    > 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.FromKnown Color(KnownColo r.InactiveCapti onText)
    >
    > btn.Name = dr("buttonname" ).ToString
    >
    > If dr("AddressOf" ) = "historycli ck" Then
    >
    > AddHandler btn.Click, AddressOf historyClick
    >
    > ElseIf dr("AddressOf" ) = "pricelevelclic k" 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
    >
    >[/color]

    Comment

    Working...