Vb.net Select语句突然结束

时间:2013-11-27 20:53:23

标签: vb.net select for-loop checkbox

我有一个我认为是一个简单问题的简单问题我看不到。我有一个表单,用户可以在其中选择多个复选框进行选择。 Checkbox Selection

当用户按下提交按钮时,我有一个数组,我想要保存正在使用的数字(1 - 12)。我的数组存储在一个模块中。

Module MyVariables

    Public NumbersUsing(11) As Integer

End Module

以下是我的选择陈述的代码,为了简单和简洁,我将切断这个有用的部分。

Private Sub SubmitBtn_Click(sender As Object, e As EventArgs) _
       Handles SubmitBtn.Click

Select Case True
    Case CheckBox1.Checked
        For i As Integer = 0 To 11
            If NumbersUsing(i) = Nothing Then
                NumbersUsing(i) = 1
                Exit For
            Else
                i += 1
            End If
        Next

    Case CheckBox2.Checked
        For i As Integer = 0 To 11
            If NumbersUsing(i) = Nothing Then
                NumbersUsing(i) = 2
                Exit For
            Else
                i += 1
            End If
        Next

    Case CheckBox3.Checked
        For i As Integer = 0 To 11
            If NumbersUsing(i) = Nothing Then
                NumbersUsing(i) = 3
                Exit For
            Else
                i += 1
            End If
        Next
 ...

  End Select

    For i = 0 To 11
        MessageBox.Show(NumbersUsing(i)) 'To test which numbers have been entered.
        i += 1
    Next

End Sub

我进入消息框的所有内容基本上都是1和0,并且它不会超过第一个case语句检查。 它不会检查除第一个之外的任何其他案例陈述。我不知道为什么会这样做。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

如果第一个Case CheckBox1.Checked为真,则Case的其余部分将不会运行。来自the documentation for Select...Case statements

  

如果 testexpression 与任何案例 表达式列表子句匹配,则案例语句后面的语句将运行到下一个语句案例案例不足结束选择声明。然后,控制转到结束选择后的语句。

答案 1 :(得分:0)

列表在这里可能会更好用。看看这样的事情是否有帮助:

Dim NumbersUsing As New List(Of Integer)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'I assumed you're using a GroupBox to hold the checkboxes
    For Each cb As CheckBox In GroupBox1.Controls.OfType(Of CheckBox)()
        If cb.Checked Then
            'As long as all the checkboxes are in the pattern you've shown _
            'SubString(8) will isolate the index of the checkboxes
            Dim index As Integer = Integer.Parse(cb.Name.Substring(8))
            NumbersUsing.Add(index)
        End If
    Next
End Sub