【发布时间】:2012-11-29 05:17:27
【问题描述】:
我在这个论坛和其他网站上搜索并看到了无数示例,但我仍然遇到这个问题; 我想为动态创建的 PictureBox-es 添加一个 Click Handler 并在其上传递一个参数,以便我知道点击了哪个图片框。
这是我当前的代码:
Public Class frmMbarimAbonimi
Private Sub frmMbarimAbonimi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'FitnessdbDataSet.clients' table. You can move, or remove it, as needed.
'Me.ClientsTableAdapter.Fill(Me.FitnessdbDataSet.clients)
'===============
Dim dt As DataTable = PaPaguar()
Dim i As Integer = 0
Dim gr(dt.Rows.Count) As GroupBox
Dim pp(dt.Rows.Count) As PictureBox
Dim lb(dt.Rows.Count) As Label
For Each row As DataRow In dt.Rows
gr(i) = New GroupBox
gr(i).Width = 200
gr(i).Height = 180
pp(i) = New PictureBox
pp(i).SizeMode = PictureBoxSizeMode.StretchImage
lb(i) = New Label
'-------------------------
Try
Using str As Stream = File.OpenRead("C:\Fotot\" + dt.Rows(i).Item("Foto"))
pp(i).Image = Image.FromStream(str)
End Using
lb(i).Text = dt.Rows(i).Item("Emer")
Catch ex As Exception
MsgBox("Fotoja nuk mund te ngarkohet, ju lutem realizoheni nje foto tjeter!!!")
End Try
'-------------------------
pp(i).Visible = True
pp(i).Width = 200
pp(i).Height = 150
AddHandler pp(i).Click, AddressOf testini
gr(i).Controls.Add(pp(i))
lb(i).Visible = True
lb(i).Width = 200
lb(i).Height = 30
lb(i).Left = pp(i).Left
lb(i).Top = pp(i).Top + 150
lb(i).BackColor = Color.WhiteSmoke
lb(i).BringToFront()
gr(i).Controls.Add(lb(i))
flpanel.Controls.Add(gr(i))
i = i + 1
Next row
End Sub
End Class
所以我尝试使用 AddHandler pp(i).Click, AddressOf testini 但显然这不允许我使用参数调用“testini”来识别单击了哪个图片框。
有人可以指出我正确的方向或提供一些建议吗?非常感谢。
【问题讨论】:
-
你已经得到了标识图片框的参数,它是sender参数。
-
我最近经常看到这个“发件人”的东西,但我不知道如何在我的情况下使用它。 'code' Public Sub testini(ByVal sender, ByVal EventArgs) '这里怎么用?结束子
-
sender是被点击的PictureBox。在您的testini方法中,您可以说Dim pbox As PictureBox = DirectCast(sender, PictureBox),然后使用用户单击的图片框执行操作(更改图片等)。
标签: vb.net visual-studio-2008 event-handling