VB Express 2010:获取PictureBox数组中的标记索引

时间:2013-03-24 04:53:13

标签: vb.net

VB Express 2010.创建了PictureBox的Checkerboard - Dim Board(64)作为PictureBox 接下来,为每个方块分配一个图像 - 与每行相似:

For x = 1 to 64
    If (x Mod 2 = 1) then 
        Board(x).Image = My.Resources.wsquare
    Else
        Board(x).Image = My.Resources.bsquare

然后将方块放在FormI上,并将.tag属性=分配给索引,如下所示:

For x = 1 to 64
    Board(x).Location = New Point(y,x1)
    Me.Controls.Add(Board(x))
    Board(x).tag = x
    .....parameters for location y, x1 incremented as necessary....
Next

所有这些都运行良好并制作了棋盘格。现在,我需要在点击一个方格时知道索引或标记。我不确定在代码中如何或在何处创建EventHandler,然后如何在后续方法中引用索引或标记。以下是错误的,但我正在尝试。 Board.Click不是数组的事件非常感谢一些代码示例或指令来解决我的困境。这个很新。提前致谢

Private Sub Clicked()
    AddHandler Board.Click, New EventHandler(AddressOf Board_Click)
End Sub

Private Sub Board_Click()

End Sub

2 个答案:

答案 0 :(得分:0)

我觉得你很亲密;你似乎被挂起的那一点是,事件处理程序需要绑定到Board数组中的每个元素而不是数组本身(这是你要做的,它看起来等)。

这里有一些让你入门的步骤....首先,我会修改这个循环:

For x = 1 to 64
    If (x Mod 2 = 1) then 
       Board(x).Image = My.Resources.wsquare
Else
    Board(x).Image = My.Resources.bsquare

成为:

For x = 1 to 64
    Board(x).Name = "Board_" + x.ToString()
    If (x Mod 2 = 1) then 
       Board(x).Image = My.Resources.wsquare
Else
    Board(x).Image = My.Resources.bsquare

因此我们使用PictureBox的Name属性来标识每个PictureBox。我们需要这个,以便您知道点击了哪个项目。

现在让我们为点击设置一个虚拟处理程序,例如:

Private Sub PictureBox1_Click(sender As Object, e As EventArgs)
    Dim clickedBox As PictureBox = CType(sender, PictureBox)

    MessageBox.Show(clickedBox.Name)
End Sub

这里我们只是从Click事件中获取点击的PictureBox,将其转换为PictureBox,然后发出其Name属性(请记住我们之前设置过)。

现在我们有了这个,我们可以再次重新访问你的For循环并将处理程序绑定到数组中每个元素的click事件,例如:

For x = 1 to 64
    Board(x).Name = "Board_" + x.ToString()
    AddHandler Board(x).Click, New EventHandler(AddressOf Me.PictureBox1_Click)
    If (x Mod 2 = 1) then 
       Board(x).Image = My.Resources.wsquare
Else
    Board(x).Image = My.Resources.bsquare

现在如果你运行它,你应该看到当你点击PictureBox时,你会看到一个显示“Board_23”或“Board_1”的消息框或者类似的东西。

现在要找出被点击的元素的Board数组中的索引,您可以使用类似的内容,例如SubstringReplace以及{{3}获取名称的数字部分。由于我们以前如何命名它,名称的数字组件是数组索引。

PS。自从我做了实际的VB.NET以来已经有一段时间了,但我认为数组是从零开始的而不是基于一的。我不确定,但你可能想在你的代码中检查一下(正如我所说,我有一段时间没有真正的VB.NET)

答案 1 :(得分:0)

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    For x = 0 To 16
        Board(x) = New PictureBox
        Board(x).Name = "Board_" + x.ToString()
        AddHandler Board(x).Click, New EventHandler(AddressOf Me.PictureBox1_Click)
        If (x Mod 2 = 1) Then
            Board(x).Image = My.Resources.green_bullet
        Else
            Board(x).Image = My.Resources.yellow_bullet
        End If
        Board(x).Location = New Point(Board(x).Width * x, 10)
        Me.Controls.Add(Board(x))
        Board(x).Tag = x
    Next x
End Sub