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

Re: Multiple AddHandler for multiple Controls on a form by ClayB

ClayB
Fri Jul 20 04:53:58 CDT 2007

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.


Re: Multiple AddHandler for multiple Controls on a form by GAZ

GAZ
Fri Jul 20 05:06:57 CDT 2007

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


"ClayB" <clayb@syncfusion.com> wrote in message
news:1184925238.485138.24110@j4g2000prf.googlegroups.com...
> 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.
>