PDA

View Full Version : AddHandler and RemoveHandler



mahsa.admin
سه شنبه 28 شهریور 1391, 11:53 صبح
باسلام
من در فرمم دوتا باتن دارم که با زدن باتن اول با کد زیر چند باتن در فرم ایجاد میشود
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

For j As Integer = 0 To dt.Rows.Count - 1

Dim btn As New ButtonX

btn.Name = j()
btn.Text = j+1)





Me.Controls.Add(btn)
btn.Parent = Rec_Lab.FlowLayoutPanel1
AddHandler btn.Click, AddressOf Click_on

End Sub
حالا میخاهم با زدن باتن شماره دو Handler پاک شود از طرفی میدونم کدش اینه
RemoveHandler btn.Click, AddressOf Click_on
اینو اگه در حلقه بالا به کار ببرم درست عمل میکنه چطور میشه در باتن دیگه(باتن شماره 2 که برای کنسل کردن هندل میباشد) به کار ببرم

Saman_12
سه شنبه 28 شهریور 1391, 12:45 عصر
برای قدم اول کد هاتون رو داخل تگ قرار بدید. event ها معمولا یه متد sender دارند که از نوع ابجکت هست و دربردارنده فراخوان event هست :

Private Sub btn_Click(sender As System.Object, e As System.EventArgs) Handles btn.Click

For i = 1 To 10

Dim newbtn As New Button

newbtn.Name = "newbtn(" & i & ")"
newbtn.Text = "Click me! [" & i & "]"

flpnl.Controls.Add(newbtn)

AddHandler newbtn.Click, AddressOf newbtns_Click
Next
End Sub

Private Sub newbtns_Click(sender As System.Object, e As System.EventArgs)

Console.WriteLine(DirectCast(sender, Button).Name)

If DirectCast(sender, Button).Name = "newbtn(2)" Then

For i = 1 To 10

Dim newbtn As Button = flpnl.Controls.Item("newbtn(" & i & ")")

RemoveHandler newbtn.Click, AddressOf newbtns_Click

Console.WriteLine(newbtn.Name & "Removed")
Next
End If
End Sub