【问题标题】:Event Handlers for Dynamic Table Layout Panel in Visual BasicVisual Basic 中动态表格布局面板的事件处理程序
【发布时间】:2014-12-08 12:29:15
【问题描述】:

我正在为学校制作一个风险类型的游戏,它在 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

任何帮助将不胜感激!我认为一旦我完成了这项工作,游戏的其余部分将很容易弄清楚。

谢谢!

【问题讨论】:

    标签: visual-studio vba button dynamic tablelayoutpanel


    【解决方案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?)

    【讨论】:

    • 我最终使用标签功能来跟踪按钮所有者。每个按钮都被动态分配了 player1 或 player2 的标签,因此每个玩家都有一半的按钮。只需修改按钮的文本属性以跟踪该按钮中的“军队”,我就能够摆脱所有数组。至于动态点击事件,我可以使用与上面相同的代码为所有按钮创建一个事件,但使用“sender.name”来引用被点击的按钮。
    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多