1

我必须分析 CheckBoxes 是否被选中。一个 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'.
4

3 回答 3

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

没有数组,没有额外的对象引用。

于 2013-11-02T15:16:15.160 回答
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
于 2013-11-02T16:37:37.263 回答
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) 是我在模块上创建的复选框数组。它将“c”复选框声明为 Cbs(n) 并对其进行分析。然后它将变量 n 加 1 并重新启动该过程,直到 TabPage 中不再有 CheckBox。

于 2013-11-02T15:46:39.140 回答