我必须分析CheckBox是否被选中。 TabPage中有10个CB,它们按顺序命名(cb1,cb2,cb3 ......等)。
For Each c As CheckBox In TabPage4.Controls
If c.Checked Then
hello = hello + 1
End If
Next
我已尝试过以上操作,但它给了我一个未处理的异常错误。
An unhandled exception of type 'System.InvalidCastException' occurred in WindowsApplication2.exe
Additional information: Unable to cast object of type 'System.Windows.Forms.Label' to type 'System.Windows.Forms.CheckBox'.
答案 0 :(得分:1)
因为页面上可以有其他控件,您需要查看每个控件是否为支票:
For Each c As Control In TabPage4.Controls
if Typeof c is CheckBox then
if Ctype(c, Checkbox).Checked Then
hello +=1
End If
End If
Next
根据您的VS版本,这可能有效(需要LINQ):
For Each c As CheckBox In TabPage4.Controls.OfType(Of CheckBox)()
If c.Checked Then
hello += 1 ' looks dubious
End If
Next
修改强>
我猜你的Ctype
部分有问题,因为你的所有数组都基本上将Ctl转换为Check(CType的作用)但是以更昂贵的方式。如果你不喜欢Ctype(并且不能使用第二种方式):
Dim chk As CheckBox
For Each c As Control In TabPage4.Controls
if Typeof c is CheckBox then
chk = Ctype(c, Checkbox)
if chk.Checked Then
hello +=1
End If
End If
Next
没有数组,没有额外的对象引用。
答案 1 :(得分:1)
在这种情况下可能没有必要,但有时你需要“按顺序”获得它们。这是一个例子:
Dim cb As CheckBox
Dim hello As Integer
Dim matches() As Control
For i As Integer = 1 To 10
matches = Me.Controls.Find("cb" & i, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is CheckBox Then
cb = DirectCast(matches(0), CheckBox)
If cb.Checked Then
hello = hello + 1
End If
End If
Next
答案 2 :(得分:0)
我对@Plutonix代码进行了一些更改并使其正常工作。这是代码:
Dim n As Integer = 1
For Each c As Control In TabPage4.Controls
If TypeOf c Is CheckBox Then
CBs(n) = c
If CBs(n).Checked Then
hello = hello + 1
End If
End If
n = n + 1
Next
Cbs(n)是我在模块上创建的CheckBoxes数组。它将'c'CheckBox声明为Cbs(n)并对其进行分析。然后它将变量n加1并重新启动该过程,直到TabPage中不再有CheckBoxes为止。