Multiple AddHandler for multiple Controls on a form

  • Thread starter Thread starter GAZ
  • Start date Start date
G

GAZ

Hello all,

We have a bit of a problem. We have a form where we have to add controls
dynamically during runtime. That part is quite simple. Now, we have to add a
ButtonClick event for each of the controls. That's where it becoms tricky.

Here is the bit of code we use:

-------------------------------------------------------------------------------------
TextControl = New Asd.ControlLibrary.AsdTextControl

Me.TextControl.BackColor = System.Drawing.Color.Transparent
.....additional properties setup

If CheckStoredProcedure <> "" Then
Me.TextControl.CheckStoredProcedure = CheckStoredProcedure
Me.TextControl.ButtonBook = True
Me.TextControl.ErrrorProvider = True
Me.TextControl.CheckRequired = True
End If

AddHandler TextControl.ButtonBookClick, AddressOf TextControl_ButtonBook

Me.Controls.Add(TextControl)
--------------------------------------------------------------------------------------

Now, everything works fine and each control acts as a separate control, but
the TextControl_ButtonBook fires only for the very last created control. I
have tried adding 'sender' parameter to the procedure but the addressof
won't accept it.

Any help and/or insight is much appreciated.

Thanks in advance.

GAZ
 
The code below works as expected for me. I create a Form , add a
button named Button1 to it and subscribe to its click event. Then in
the click handler I dynamically add another button every time Button1
is clicked.

Public Class Form1
Dim testButton As Button
Dim a As Integer = 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
Me.testButton = New Button()
Me.testButton.Name = String.Format("test{0}", a)
Me.testButton.Location = New Point(a * 100, 10)
a += 1
AddHandler testButton.Click, AddressOf Test_Click
Me.Controls.Add(Me.testButton)
End Sub

Private Sub Test_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Dim c As Control = CType(sender, Control)
MessageBox.Show(c.Name)
End Sub
End Class


====================
Clay Burch
Syncfusion, Inc.
 
Thanks for the answer. Problem was not in the code, it was in the event
declaration of the control. The event declaration was missing the ByVal
sender as Object bit.

Thanks,

GAZ
 
Back
Top