【发布时间】:2013-04-06 20:37:30
【问题描述】:
我正在为一个课程作业创建一个棋盘游戏。对于棋盘,我使用一些嵌套的 For 循环在 2D 数组中运行,以在每个方格生成一个“Space”对象。
Space 对象包含一个图片框和一些关于该空间的数据。
如何处理由单击生成的图片框引起的事件,而不必为每个空间进行硬编码?
我注意到this 的问题似乎解决了这个问题,但它是用 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
【问题讨论】:
-
请随时分享您的尝试以及您的确切问题。没有人愿意为您做作业,但我们当然会帮助您解决实际问题。那么:什么不起作用?
-
@Mr.VVOO 好吧,我不知道如何解决这个问题。目前,我有 600 个以编程方式生成的图片框存储在 2D 数组中,并且无法处理来自它们的点击事件。我尝试创建一个事件来处理数组上的单击事件,但它不起作用(即:
Sub space_Click(sender As Object, e As EventArgs) Handles board().Click)。我能想到的唯一其他“解决方案”是手动编写一个例程来处理每个图片框,这将异常低效。 -
那么也许你应该提供一些代码,其他人可以看到从哪里以及如何开始。
-
但它是用 C# 编写的,我无法将它翻译成 VB.Net。 C# 和 VB.NET 是由同一个团队开发的,所以它们几乎是一回事。和
generatedControl.Click += generatedControl_ClickHandler;在VB.NET 中AddHandler generatedControl.Click, AddressOf generatedControl_ClickHandler -
@Fabio 好的,那会去哪里?就在我声明数组来保存它们之后,还是在我初始化空间之后?
标签: vb.net winforms visual-studio-2012