2012-11-08 32 views
0

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

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

为了找出哪些图片框被按下时,你catWindow子应该是这样的:

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 
+0

我从我的数据库中提取的一系列信息,并把它在名单上。通过数组来完成这项工作会更容易吗?还是应该以完全不同的方向来解决这个问题?哦,那个catWindow的东西奏效了,谢谢! – spkelly86

+0

@ spkelly86考察数据绑定 –