在获胜表单上有一堆复选框。 我希望能够迭代它们,看看它们是否被检查。我确实知道如何找到表单上的控件。
我的复选框被命名为“CBr3C1”到“CBr12C1”,其中“r”代表表单上的行号。所以我想迭代第 3 行到第 12 行。我知道 at 控件名称属于控件类型。
如果我设置一个循环,例如 for Z as integer = 1 to 12 我可以以及如何将“CBrZC1”转换为控件名称。
Dim Z As Integer = 3
For Each ctrl As Control In Me.Form.Controls
If TypeOf ctrl Is CheckBox Then
ctlNameis = CType(ctrl, CheckBox).ID
If Microsoft.VisualBasic.Left(ctlNameis, 3) = ("CBr") Then
If Microsoft.VisualBasic.Right(ctlNameis, 2) = ("C" & PltLabelNbr) Then
If Me.CBrZC1.Checked = True Then
'**** dosomething
Else
End If
Z += 1
If Z = 13 Then
Exit Sub
End If
End If
End If
End If
Next
谢谢你
编辑:
为了完整性,我保留了原来的答案,但是,由于这是针对网络表单的,所以它实际上并不适用。我不使用 Web 表单,所以我不确定是否有更好的方法,但 LINQ 的这一点应该可以解决问题:
For r = 3 To 12
Dim cbx = Controls.OfType(Of CheckBox)().First(Function(cb) cb.ID = $"CBr{r}C1")
If cbx.Checked Then
'...
End If
Next
它使用与原始代码相同的基本结构,但避免索引
Controls
集合。 OfType
将过滤掉任何不是 CheckBox
的内容并处理转换,然后 First
将获取具有指定 ID
的第一个项目。
原文:
鉴于您确切地知道名称是什么,因此无需查看每个控件。只需使用您想要的名称即可获得控件,例如
For r = 3 To 12
Dim cbx = DirectCast(Controls($"CBr{r}C1"), CheckBox)
If cbx.Checked Then
'...
End If
Next