2012-11-08 38 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考察數據綁定 –