'For'循环用于分析面板中的CheckBoxes

时间:2013-11-02 15:09:25

标签: vb.net visual-studio visual-studio-2012 for-loop checkbox

我必须分析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'.

3 个答案:

答案 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为止。