Я делаю игру типа риска для школы, которая динамически создает сетку 4x4 на панели панели таблицы в визуальном базовом формате. Я успешно создал панель и кнопки с именами, которые соответствуют строке и столбцу кнопки. Также есть две параллельные массивы - одна для владельца кнопки, а другая для номера кнопки - которые соответствуют владельцу кнопки и количеству «армий» в кнопке. Моя проблема в том, что когда пользователь нажимает на определенную кнопку, мне нужно указать имя/значение кнопки, чтобы узнать, сколько «армий» на кнопке должно контролировать «атакующую» часть хода игрока.Обработчики событий для панели динамической таблицы Layout в 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
Любая помощь была бы принята с благодарностью! Я думаю, что как только я получу эту работу, остальная часть игры будет довольно простой.
Спасибо!
В итоге я использовал ta g, чтобы отслеживать владельцев кнопок. Каждой кнопке динамически назначался тэг player1 или player2, так что у каждого игрока была половина кнопок. Мне удалось полностью избавиться от массивов, просто изменив свойство текста кнопок, чтобы отслеживать «армии» в этой кнопке. Что касается событий динамического клика, я смог сделать одно событие для всех кнопок, используя тот же самый код, который у меня был выше, но с помощью «sender.name», который будет ссылаться на нажатую кнопку. – jstam397