Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Visual Basic中动态表布局面板的事件处理程序_Visual Studio_Vba_Button_Dynamic_Tablelayoutpanel - Fatal编程技术网

Visual studio Visual Basic中动态表布局面板的事件处理程序

Visual studio Visual Basic中动态表布局面板的事件处理程序,visual-studio,vba,button,dynamic,tablelayoutpanel,Visual Studio,Vba,Button,Dynamic,Tablelayoutpanel,我正在为学校制作一个风险类型的游戏,在VisualBasic的表格布局面板中动态创建一个4x4的按钮网格。我已经成功地创建了面板和按钮,其名称与按钮的行和列对应。还有两个平行数组——一个用于按钮所有者,另一个用于按钮编号——对应于按钮所有者和按钮中“军队”的数量。我的问题是,当用户单击某个按钮时,我需要参考按钮名称/值,以了解该按钮控制玩家回合“攻击”部分的“军队”数量 下面的代码创建表布局面板和带有名称的按钮 'Create table Dynamically Dim ColCount

我正在为学校制作一个风险类型的游戏,在VisualBasic的表格布局面板中动态创建一个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
任何帮助都将不胜感激!我想,一旦我把这项工作做好,游戏的其余部分就很容易搞定了


谢谢

将名称放在“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?

我最后使用标记功能跟踪按钮所有者。每个按钮都动态分配了一个player1或player2标签,这样每个玩家都有一半的按钮。通过修改按钮的文本属性来跟踪按钮中的“军队”,我就可以将数组全部去掉。至于动态点击事件,我能够通过使用与上面相同的代码为所有按钮创建一个事件,但是使用了“sender.name”,它将引用被点击的按钮。