【问题标题】:How do I create an event handler for a programmatically created PictureBox Array?如何为以编程方式创建的 PictureBox 数组创建事件处理程序?
【发布时间】:2017-10-12 14:13:36
【问题描述】:

我已经创建了一个二维的 PictureBox 数组,我想给数组的所有元素添加一个 DragDrop 事件。

 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 开始。请阅读How to Ask 并使用tour

标签: arrays vb.net multidimensional-array event-handling


【解决方案1】:

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

【讨论】:

  • 所以我必须为每个图片框创建一个Sub?
  • 我想出了这个,但它显示错误:“。”预期 Private Sub p11(p11 As Object, e As System.Windows.Forms.DragEventArgs) Handles p(1,1).DragDrop End Sub
  • @Cyrill :不,只需为所有图片框创建一个事件处理程序:Private Sub PictureBoxes_DragDrop(sender As Object, e As DragEventArgs)(注意最后没有Handles ...),然后:AddHandler p(x, y).DragDrop, AddressOf PictureBoxes_DragDrop
  • @Cyrill :如果我的建议解决了您的问题,那么帕特里克的回答也是如此。在这种情况下,请按帖子左侧的勾选/复选标记,将答案标记为已接受。 -- 更多信息见:How does accepting an answer work?
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多