如何为程序创建的PictureBox数组创建事件处理程序?

问题描述:

我已经创建了一个PictureBoxes的二维数组,我想将一个DragDrop事件添加到数组的所有元素。如何为程序创建的PictureBox数组创建事件处理程序?

For x As Integer = 1 To 16 
     For y As Integer = 1 To 4 
      p(x, y) = New PictureBox() 
      p(x, y).Image = My.Resources.Kästchen 
      p(x, y).Location = New Point(pMain.Left + x * 48, pMain.Top + y * 48) 
      p(x, y).Size = New Size(48, 48) 
      p(x, y).Name = "p"+str(x)+str(y) 
      AddHandler p(x, y).DragDrop, AddressOf p(x,y)_DragDrop 

      p(x, y).Visible = True 
      Me.Controls.Add(p(x, y)) 


     Next 
    Next 

我知道,有一个类似的答案here,但我没能使其适应阵列。 如何为运行时创建的所有PictureBox添加DragDrop事件?

+0

由于控件的数量是硬编码的,为什么不把它们放在设计器的窗体中呢?您仍然可以将对它们的引用存储在数组中以进行循环。请注意,您的应用可能泄漏,数组索引从0开始。请阅读[问]并参加[导览] – Plutonix

您不能有一个子名p(x,y)_DragDrop。您需要创建签名为(sender As Object, e As DragEventArgs)的子版本,并使用sender来标识图片框。

+0

因此,我必须为每个图片框创建一个Sub? – Cyrill

+0

我想出了这个,但它显示错误:“。”预期 Private Sub p11(p11 As Object,e As System.Windows.Forms.DragEventArgs)处理p(1,1).DragDrop End Sub – Cyrill

+2

@Cyrill:不,只需为所有图片框创建一个事件处理程序: Private Sub PictureBoxes_DragDrop(sender As Object,e As DragEventArgs)'(注意最后没有'Handles ...'),那么:AddHandler p(x,y).DragDrop,AddressOf PictureBoxes_DragDrop'。 –