Vb.net 如何响应以编程方式创建的UI元素引发的事件?

Vb.net 如何响应以编程方式创建的UI元素引发的事件?,vb.net,winforms,visual-studio-2012,Vb.net,Winforms,Visual Studio 2012,我正在为一个课程作业制作一个棋盘游戏。对于电路板,我使用一些嵌套的For循环,通过一个二维数组在每个正方形上生成一个“Space”对象 空间对象包含一个picturebox和一些有关该空间的数据 我如何处理点击生成的picturebox而导致的事件,而不必为每个空间硬编码 我注意到这个问题似乎解决了这个问题,但它是用C语言编写的,我无法将它翻译成VB.Net 编辑: 这就是电路板的生成方式 Dim board(23, 24) As Space Private Sub GenerateBoa

我正在为一个课程作业制作一个棋盘游戏。对于电路板,我使用一些嵌套的For循环,通过一个二维数组在每个正方形上生成一个“Space”对象

空间对象包含一个picturebox和一些有关该空间的数据

我如何处理点击生成的picturebox而导致的事件,而不必为每个空间硬编码

我注意到这个问题似乎解决了这个问题,但它是用C语言编写的,我无法将它翻译成VB.Net

编辑: 这就是电路板的生成方式

 Dim board(23, 24) As Space

 Private Sub GenerateBoard()

    Dim spaceSize As New Size(30, 30)
    Dim spaceLocation As New Point
    Dim validity As Boolean

    For Y = 0 To 24
        For X = 0 To 23
            spaceLocation.X = 6 + (31 * X)
            spaceLocation.Y = 6 + (31 * Y)

            If validSpaces(Y).Contains(X + 1) Then
                validity = True
            Else
                validity = False
            End If

            board(X, Y) = New Space(validity, spaceSize, spaceLocation)
            Me.Controls.Add(board(X, Y).imageBox)
            board(X, Y).imageBox.BackColor = Color.Transparent
            board(X, Y).imageBox.BringToFront()
        Next
    Next
End Sub
空间等级:

Public Class Space

Dim _active As Boolean
Dim _imageBox As PictureBox

Public Sub New(ByVal activeInput As Boolean, ByVal size As Size, ByVal location As Point)
    _active = activeInput
    _imageBox = New PictureBox
    With _imageBox
        .Size = size
        .Location = location
        .Visible = False
    End With
End Sub

Property active As Boolean
    Get
        Return _active
    End Get
    Set(value As Boolean)
        _active = value
    End Set
End Property

Property imageBox As PictureBox
    Get
        Return _imageBox
    End Get
    Set(value As PictureBox)
        _imageBox = value
    End Set
End Property

Public Sub highlight()
    With _imageBox
        .Image = My.Resources.Highlighted_slab
        .Visible = True
    End With
End Sub
End Class

首先,设计器创建的所有控件(文本框、标签…)也是由代码生成的,但VisualStudio会为您编写这些控件。如果打开设计器文件(
yourForm.Designer.vb
),则可以看到如何生成控件的所有代码

如果要为
pictureBox
创建事件处理程序,请执行以下操作:

//Initialize control
Private WithEvents _imageBox as PictureBox
然后创建一个事件处理程序方法:

Private Sub imageBox_Click(sender as Object, e as EventArgs)
    //Your code
End Sub
然后,在VB.NET中,可以通过两种方式为事件分配事件处理程序

第一:在创建pictureBox(
New pictureBox()
)后添加类内构造函数

第二:我们在第二行创建了一个事件处理程序添加下一步:

Private Sub imageBox_Click(sender as Object, e as EventArgs) Handles _imageBox.Click
    //Your code
End Sub

请记住将您的pictureBox添加到表单控件
YourForm.controls.add(spaceInstance.ImageBox)

请始终分享您的尝试以及您的确切问题。没有人愿意做你的家庭作业,但我们当然会帮助你解决真正的问题。那么:什么不起作用?@VVOO先生我不知道如何解决这个问题。目前,我有600个程序生成的PictureBox存储在2D数组中,无法处理来自它们的点击事件。我尝试创建一个事件来处理数组上的单击事件,但该事件不起作用(即:
子空间\u click(发送者作为对象,e作为事件args)Handles board()。单击
)。我唯一能想到的另一个“解决方案”是手动编写一个例程来处理每个picturebox,这将是非常低效的。因此,也许你应该提供一些代码,其他人可以看到从何处开始以及如何开始。但它是用C语言编写的,我无法将其转换为VB.Net。C#和VB.NET是由同一个团队开发的,所以它有很多相同的东西。和
generatedControl.Click+=generatedControl\u ClickHandlerAddHandler generatedControl中的code>。单击,generatedControl的地址\u单击Handler
@Fabio好的,那会去哪里?在我声明数组以容纳它们之后,还是在我初始化空间之后?
Private Sub imageBox_Click(sender as Object, e as EventArgs) Handles _imageBox.Click
    //Your code
End Sub