在VB.NET中禁用动态生成的按钮

时间:2016-04-16 18:18:56

标签: vb.net

我有以下代码在表单的加载事件上运行。其中,行和列是可变的,每次表单加载时都可以有不同的值。

    Dim XPos, YPos As Integer
    Dim btn As Button
    XPos = 80
    YPos = 80
    For i = 1 To row
        XPos = 150
        For j = 1 To column
           btn = New Button
           btn.Name = "btn" & i & j
           btn.Size = New Drawing.Size(40, 40)
           btn.Location = New Point(XPos, YPos)
           Me.Controls.Add(btn)
           XPos = XPos + btn.Width + 5
        Next
        YPos = YPos + btn.Height + 5
    Next

假设,row = 5和column = 5,那么输出将类似于

btn11  btn12  btn13  btn14  btn15
btn21  btn22  btn23  btn24  btn25
btn31  btn32  btn33  btn34  btn35
btn41  btn42  btn43  btn44  btn45
btn51  btn52  btn53  btn54  btn55

现在,如果我点击btn32然后我只能点击它的相邻按钮,如: btn21,btn22,btn23,btn31,btn33,btn41,btn42,btn43,我无法点击其余按钮。

如果我先点击btn54,那么我将只能点击btn53,btn43,bt44mbtn45,btn55,我将无法点击其余的按钮。

其余按钮应保持相同的样式(颜色,文字等)

如何禁用其余按钮。在这帮帮我......

1 个答案:

答案 0 :(得分:1)

您可以将它们存储在对象本身的属性中,而不是像Visual Vincent建议的那样提取单击按钮的行和列。 然后,就像已经描述的那样 - 遍历Me.Controls并禁用所有按钮,其行和列属性不符合要求保持启用状态。

Class GenBtn
    Inherits Button
    Private row, col As Integer
    Public Function isAdjacent(ByRef Column As Integer, ByRef Row As Integer)
        If Column < Me.col - 1 Or Column > Me.col + 1 Then
            Return False
        ElseIf Row < Me.row - 1 Or Row > Me.row + 1 Then
            Return False
        Else
            Return True
        End If
    End Function
End Class

提示:将控件分组以轻松指向生成的控件,而不会意外禁用主要元素。