假设我有一个表单,在我的表单下我有一个面板,在面板下我有一个组合框,在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)
非常感谢你!任何帮助将不胜感激。对不起英语不好。
答案 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)