我正在为学校制作风险型游戏,在visual basic中的表格布局面板中动态创建一个4x4网格按钮。我已经成功创建了面板和按钮,其名称对应于按钮的行和列。还有两个并行阵列 - 一个用于按钮所有者,另一个用于按钮编号 - 对应于按钮的所有者和按钮中的“军队”数量。我的问题是,当用户点击某个按钮时,我需要引用按钮名称/值来了解该按钮有多少“军队”来控制玩家回合的“攻击”部分。
以下代码创建表格布局面板和带名称的按钮。
'Create table Dynamically
Dim ColCount As Integer = 4
Dim RowCount As Integer = 4
Dim f As New System.Drawing.Font("Arial", 15)
riskTable.AutoScroll = True
riskTable.Dock = DockStyle.Fill
riskTable.ColumnCount = ColCount
riskTable.RowCount = RowCount
For rowNo As Integer = 0 To riskTable.RowCount - 1
For columnNo As Integer = 0 To riskTable.ColumnCount - 1
Dim buttonname As String
buttonname = "B" & rowNo & columnNo
Dim button As Control = New Button
button.Size = New Size(179, 100)
button.Name = buttonname
button.Text = "1"
button.ForeColor = Color.White
button.Font = f
AddHandler button.Click, AddressOf buttonname_Click
riskTable.Controls.Add(button, columnNo, rowNo)
Next
Next
Me.Controls.Add(riskTable)
这是我创建的动态事件处理程序。我尝试使用'Me.Click'来获取按钮的名称,但它只返回表单的名称。我需要在这里有代码,引用当前单击的按钮的名称,然后依次引用框所有者和框号数组。
Private Sub buttonname_Click(sender As Object, e As EventArgs) Handles Me.Click
MessageBox.Show(Me.Name)
End Sub
任何帮助将不胜感激!我认为,一旦我开始工作,游戏的其余部分将很容易理解。
谢谢!
答案 0 :(得分:0)
将名称改为'button.Tag'代替/还:
button.Tag = buttonname
然后很容易得到名称:
Private Sub buttonname_Click(sender As Object, e As EventArgs) Handles Me.Click
Dim result As String = CType(CType(sender, System.Windows.Forms.Button).Tag, String)
End Sub
(检查 System.Windows.Forms.Button 但是,可能需要进行一些调整以匹配表中的按钮。 riskTable.Controls.button ?)