我正在使用动态创建的控件,需要在运行时检索有关控件的信息。
If IsLoaded <> "free" Then
flow_display.Controls.Clear()
For x As Integer = 0 To populate.Count - 1
If populate(x).parentID = 2 Then
Dim NewPicBox As PictureBox = New PictureBox
NewPicBox.Size = New System.Drawing.Size(697, 50)
NewPicBox.ImageLocation = pw_imgLink & populate(x).imageID
AddHandler NewPicBox.Click, AddressOf catWindow
flow_display.Controls.Add(NewPicBox)
End If
Next
IsLoaded = "free"
End If
End Sub
这里我在用户点击相应标签时创建控件。现在catWindow子是空的。我需要弄清楚点击了哪个按钮,并在填充列表中找出它的位置。我尝试了一些事情,从我从其他问题中读到的内容似乎无法找到任何帮助。谢谢:))
答案 0 :(得分:1)
为了找出按下哪个PictureBox,你的catWindow Sub应如下所示:
Public Sub catWindow(ByVal sender As Object, ByVal e As EventArgs)
Dim box As PictureBox = TryCast(sender, PictureBox)
If box Is Nothing Then Exit Sub
'Now "box" refers to the PictureBox that was pressed
'...
End Sub
如果要在填充列表中找到它的位置,则需要遍历列表,直到找到匹配的框。您还可以抢占PictureBox上没有执行任何操作的属性,并使用它来存储索引。较旧的表单工具曾经具有.Tag属性,尤其适用于此类事物。但实际上,这样做的必要性就像是一个设计缺陷。
FWIW,我会像这样重写原始样本:
If IsLoaded <> "free" Then
flow_display.SuspendLayout()
flow_display.Controls.Clear()
For Each box As PictureBox In populate
.Where(Function(p) p.parentID = 2)
.Select(Function(p) New PictureBox() With {
.Size = New System.Drawing.Size(697, 50),
.ImageLocation pw_imgLink & p.imageID })
AddHandler box.Click, AddressOf catWindow
flow_display.Controls.Add(box)
Next box
flow_display.ResumeLayout()
IsLoaded = "free"
End If