检查数组中复选框的状态 - 运行时错误

时间:2013-05-05 22:48:22

标签: arrays vb.net object

我希望在单击表单上的任何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

1 个答案:

答案 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,并将它们作为事件参数传递(所以你可能需要一个自定义事件)