我有一个我认为是一个简单问题的简单问题我看不到。我有一个表单,用户可以在其中选择多个复选框进行选择。
当用户按下提交按钮时,我有一个数组,我想要保存正在使用的数字(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语句检查。 它不会检查除第一个之外的任何其他案例陈述。我不知道为什么会这样做。
非常感谢任何帮助。
答案 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