(VB) 如何让点击的图片框知道它是数组的哪一部分?
(VB) How to allow a clicked picturebox to know which part of the array it is?
我正在尝试将扫雷游戏作为 vb 中的一个项目,但我无法弄清楚这一点,不胜感激。
我在一个表格上有一个由 100 个图片框组成的网格,然后编写代码以在 10x10 数组中随机选择几个位置以标记为 "bomb"(当时是一个字符串)。我的问题是我不知道如何将单击的框与其在数组中的位置相关联。
我知道如何使用 DirectCast,但在这种情况下无法实现。我也曾考虑过尝试使用图片框作为对象,但我不确定它是如何工作的。
希望有人能提供帮助!
One way would be to embed the position in the Name property of each PB
(then parse it in the click handler).
Parsing in the click handler sounds like a good idea. How would I go
about doing this? Sorry, I have little experience.
您可以简单地用相同的前缀命名所有图片框,然后是行和列;这三个部分用下划线分隔。例如,第 2 行第 3 列中的 PictureBox 可以命名为“pb_2_3”。
现在您可以使用通用处理程序和 String.Split()
检索 row/column:
Private Sub pbs_Click(sender As Object, e As EventArgs) Handles pb_2_3.Click, pb_2_4.Click
Dim pb As PictureBox = DirectCast(sender, PictureBox)
If pb.Name.ToLower.StartsWith("pb_") Then
Dim values() As String = pb.Name.Split("_")
If values.Length = 3 Then
Dim row As Integer = CInt(values(1))
Dim col As Integer = CInt(values(2))
Debug.Print(String.Format("Name: {0}, Row: {1}, Col: {2}", pb.Name, row, col))
End If
End If
End Sub
显然,这意味着您必须手动重命名所有 100 个 PictureBoxes...不好玩;但如果你也使用 Tag() 属性 方法,你也必须这样做。
我正在尝试将扫雷游戏作为 vb 中的一个项目,但我无法弄清楚这一点,不胜感激。
我在一个表格上有一个由 100 个图片框组成的网格,然后编写代码以在 10x10 数组中随机选择几个位置以标记为 "bomb"(当时是一个字符串)。我的问题是我不知道如何将单击的框与其在数组中的位置相关联。
我知道如何使用 DirectCast,但在这种情况下无法实现。我也曾考虑过尝试使用图片框作为对象,但我不确定它是如何工作的。
希望有人能提供帮助!
One way would be to embed the position in the Name property of each PB (then parse it in the click handler).
Parsing in the click handler sounds like a good idea. How would I go about doing this? Sorry, I have little experience.
您可以简单地用相同的前缀命名所有图片框,然后是行和列;这三个部分用下划线分隔。例如,第 2 行第 3 列中的 PictureBox 可以命名为“pb_2_3”。
现在您可以使用通用处理程序和 String.Split()
检索 row/column:
Private Sub pbs_Click(sender As Object, e As EventArgs) Handles pb_2_3.Click, pb_2_4.Click
Dim pb As PictureBox = DirectCast(sender, PictureBox)
If pb.Name.ToLower.StartsWith("pb_") Then
Dim values() As String = pb.Name.Split("_")
If values.Length = 3 Then
Dim row As Integer = CInt(values(1))
Dim col As Integer = CInt(values(2))
Debug.Print(String.Format("Name: {0}, Row: {1}, Col: {2}", pb.Name, row, col))
End If
End If
End Sub
显然,这意味着您必须手动重命名所有 100 个 PictureBoxes...不好玩;但如果你也使用 Tag() 属性 方法,你也必须这样做。