我有以下代码在表单的加载事件上运行。其中,行和列是可变的,每次表单加载时都可以有不同的值。
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,我将无法点击其余的按钮。
其余按钮应保持相同的样式(颜色,文字等)
如何禁用其余按钮。在这帮帮我......
答案 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
提示:将控件分组以轻松指向生成的控件,而不会意外禁用主要元素。