2014-12-08 3 views
0

Я делаю игру типа риска для школы, которая динамически создает сетку 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 

Любая помощь была бы принята с благодарностью! Я думаю, что как только я получу эту работу, остальная часть игры будет довольно простой.

Спасибо!

ответ

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?)

+0

В итоге я использовал ta g, чтобы отслеживать владельцев кнопок. Каждой кнопке динамически назначался тэг player1 или player2, так что у каждого игрока была половина кнопок. Мне удалось полностью избавиться от массивов, просто изменив свойство текста кнопок, чтобы отслеживать «армии» в этой кнопке. Что касается событий динамического клика, я смог сделать одно событие для всех кнопок, используя тот же самый код, который у меня был выше, но с помощью «sender.name», который будет ссылаться на нажатую кнопку. – jstam397

 Смежные вопросы

  • Нет связанных вопросов^_^