检索动态控件的数据

时间:2012-11-08 20:13:58

标签: vb.net winforms dynamic-controls

我正在使用动态创建的控件,需要在运行时检索有关控件的信息。

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子是空的。我需要弄清楚点击了哪个按钮,并在填充列表中找出它的位置。我尝试了一些事情,从我从其他问题中读到的内容似乎无法找到任何帮助。谢谢:))

1 个答案:

答案 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