0

我尝试绘制 64 个按钮(8 行 8 列)来制作游戏,但由于某种原因我的代码不起作用。我希望有人可以帮助我。

Public Class Form1
Dim AMOUNTOF_COLUMNS As Integer = 8
Dim AMOUNTOF_ROWS As Integer = 8
Public Function setNew(row As Integer, column As Integer) As Button

    Dim newButton As New Button()
    newButton.Width = 40
    Me.Controls.Add(newButton)
    newButton.Left = 0
    newButton.Top = 0
    newButton.Height = newButton.Width
    newButton.Text = ""
    newButton.Tag = (column + (row * AMOUNTOF_COLUMNS))
    AddHandler newButton.MouseDown, AddressOf Klik
    Return newButton
End Function

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For value1 As Integer = 0 To AMOUNTOF_ROWS Step 1
        For value2 As Integer = 0 To AMOUNTOF_COLUMNS Step 1
            Me.setNew(value1, value2)
        Next
    Next
End Sub

如果我执行这段代码,它只会吸引我一个按钮。

4

2 回答 2

2

您正在绘制 64 个按钮,但它们都在彼此之上。您需要正确偏移它们。特别是应该修改这些行,以便每个按钮都获得正确的位置。

newButton.Left = 0
newButton.Top = 0

编辑:

newButton.Tag = "Column x - row y"

Public Sub Klik(sender as Object, e As EventArgs)
    Dim b as Button = sender
    Dim value as String = b.Tag
    If value = "Column 1 - row 1" Then
         ' Do action for col 1 row 1
    Else If value = "Column 2 row 1" Then
         ' Do action for col 2 row 1
    Else If ...
    Else If ...
    End If
End Sub
于 2013-11-10T11:00:42.133 回答
1

您需要修改方法以将按钮彼此相邻绘制,并相应地设置它们的LeftTop属性:

Public Function setNew(row As Integer, column As Integer) As Button

    Dim newButton As New Button()
    newButton.Width = 40
    newButton.Height = newButton.Width
    Me.Controls.Add(newButton)
    newButton.Left = column * newButton.Width ' you may need some offset here too
    newButton.Top = row * newButton.Height ' you may need some offset here too
    newButton.Text = ""
    newButton.Tag = (column + (row * AMOUNTOF_COLUMNS))
    AddHandler newButton.MouseDown, AddressOf Klik
    Return newButton
End Function

此外,您需要少画一列和一行,因为您当前正在创建 9 行和列

For value1 As Integer = 0 To AMOUNTOF_ROWS - 1 Step 1
    For value2 As Integer = 0 To AMOUNTOF_COLUMNS -1 Step 1
        Me.setNew(value1, value2)
    Next
Next
于 2013-11-10T11:07:27.330 回答