Обработчики событий для панели динамического макета таблицы в Visual Basic
Я делаю игру типа риска для школы, которая динамически создает сетку кнопок 4х4 на панели макета таблицы в Visual Basic. Я успешно создал панель и кнопки с именами, которые соответствуют строке и столбцу кнопки. Есть также два параллельных массива - один для владельца кнопки, а другой для номера кнопки - которые соответствуют владельцу кнопки и количеству "армий" в кнопке. Моя проблема в том, что когда пользователь нажимает на определенную кнопку, мне нужно указать имя / значение кнопки, чтобы узнать, сколько "армий" кнопка должна контролировать "атаку" в части хода игрока.
Следующий код создает панель макета таблицы и кнопки с именами.
'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
Любая помощь будет принята с благодарностью! Я думаю, что как только я это заработаю, остальная часть игры будет довольно проста для понимания.
Спасибо!
1 ответ
Поместите имя в '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?)