计算并获取VB.NET中已选中复选框的所有值

时间:2015-03-26 11:47:00

标签: vb.net visual-studio-2010 checkbox

假设我有一个表单,在我的表单下我有一个面板,在面板下我有一个组合框,在groupbox下我有另一个面板,在这个面板下面我有一个多个复选框,现在,如何我可以计算检查了多少个复选框,如何获得已选中复选框的值并将其放入arraylist中。我有一个代码但不起作用。

我的代码:

        Dim list As New ArrayList
        Dim count As Integer
        count = 0
        If TypeOf element Is CheckBox Then

         If cb.Checked Then
            list.Add(cb.Text)
        'End If
        Else
            For Each childElement In element.Controls
               count += 1
            Next
        End If
        MsgBox(count)
        MsgBox(list)
非常感谢你!任何帮助将不胜感激。对不起英语不好。

3 个答案:

答案 0 :(得分:1)

循环遍历内部面板中的所有控件,并检查它们是否为CheckBoxes。如果是,则检查它们,递增计数并将文本添加到列表中。我会使用泛型List(Of String)而不是ArrayList。

Dim count As Integer 
Dim myList As New List(Of String)
For Each cb As CheckBox In panel1.Controls.OfType(Of CheckBox)
    If cb.Checked Then
        count += 1
        myList.Add(cb.Text)
    End If
Next
MessageBox.Show(count.ToString)
MessageBox.Show(String.Join(", ", myList))

[编辑]根据Plutonix的建议简化了代码,使用Controls.OfType(Of CheckBox)仅遍历CheckBox类型的控件,

答案 1 :(得分:0)

Dim chk As CheckBox
For Each c As Control In thePanel.Controls

    if Typeof c is CheckBox then
     count += 1 // to count check boxes
        chk  =  Ctype(c, Checkbox)
        if chk.Checked Then
            list.Add(chk.Text) // to add the text of checkbox to array
        End If
    End If
Next

答案 2 :(得分:0)

你可以使用递归来做到这一点。试试这个。

        Private Sub getcheckme(ByVal element As Control)
        Dim count As Integer
        count = 0
        If TypeOf element Is CheckBox Then
            If DirectCast(element, CheckBox).Checked = True Then
                count += 1 'this will count the checked checkboxes
                list.Add(element.Text) ' this will add the value of checkboxes into arraylist
            End If
        Else
            For Each childElement In element.Controls
                Me.getcheckme(childElement)
            Next
        End If
        End Sub

只需使用:Me.getcheckme(Me)

进行调用即可