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