我希望在单击表单上的任何197个复选框时运行一个代码块。我有一个数组中的所有复选框,我用它来检查表单加载上每个席位的可用性(该程序是一个座位预订系统)。每个座位都是一个显示为按钮的复选框,我希望“Seats selected”标签显示选中的座位。我在下面的代码中使用相同的数组来检查它们是否被检查,如果它们是标签,则会更新。当我单击其中一个复选框时,下面的代码给出了一个描述为“对象引用未设置为对象实例”的错误。我不确定为什么会这样,我真的找不到解决方案。我现在只编写前三个复选框,只是为了查看它是否有效。理想情况下,我想列出所有197个复选框作为此过程的句柄,因此当点击任何一个时,将检查每个席位检查状态。
如果有人有一个很棒的解决方案!感谢。
Public Class frmSeatPlan
Dim seat(11, 20) As Control
Private Sub A1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles A1.CheckedChanged, A2.CheckedChanged, A3.CheckedChanged
seat(1, 1) = A1
seat(1, 2) = A2
seat(1, 3) = A3
For y = 1 To 1
For x = 1 To 3
Dim seat(y, x) As CheckBox
If seat(y, x).Checked = True Then
selectedSeats = selectedSeats & seat(y, x).Name & ", "
MsgBox(selectedSeats)
lblSelected.Text = selectedSeats
End If
Next x
Next y
End Sub
答案 0 :(得分:0)
你要写句柄条款197次吗?当你完成时你能确定你没有犯错误吗?如果你在#156和#157之间添加#198座位怎么办?你会怎么回事?你正逐步为自己计划维护噩梦。相反,您应该在代码中绑定事件,您还可以在其中创建这些复选框。这样你就不会遇到问题。
For y = 1 to 3
For x = 1 to 3
Dim chk As New CheckBox
'set positioning on the screen
chk.X = x
chk.Y = y
AddHandler chk.CheckedChanged, AddressOf Any_CheckedChanged
Next
Next
理想情况下,你也不需要你的数组,即seat(y, x)
,因为每个座位在创建时都可以分配X和Y,并将它们作为事件参数传递(所以你可能需要一个自定义事件)