2013-05-05 89 views
0

我想在单击窗体上的197个复选框中的任意一个时运行一个代码块。我有一个数组中的所有复选框,用于检查表单加载中每个座位的可用性(此程序是座位预订系统)。每个座位都显示为一个按钮,并且我希望“座位已选”标签显示选中的座位。我在下面的代码中使用了相同的数组来检查它们是否被检查过,并且它们是否会被更新。当我单击其中一个复选框时,下面的代码给了我一个描述为“对象引用未设置为对象实例”的错误。我不确定这是为什么,我也找不到解决方案。我现在只编码前三个复选框,以查看它是否有效。理想情况下,我想列出所有197个复选框作为此过程的句柄,因此当单击任何单个checkstate状态时都会被检查。检查数组中复选框的状态 - 运行时错误

如果有人有一个很好的解决方案!谢谢。

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

你打算写句柄第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它们被创建时,并通过这些作为事件的参数(所以你可能会需要一个自定义事件) 。

相关问题