将 CheckBox 控件名称与字符串连接

问题描述 投票:0回答:1

在获胜表单上有一堆复选框。 我希望能够迭代它们,看看它们是否被检查。我确实知道如何找到表单上的控件。

我的复选框被命名为“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

谢谢你

vb.net webforms
1个回答
2
投票

编辑:

为了完整性,我保留了原来的答案,但是,由于这是针对网络表单的,所以它实际上并不适用。我不使用 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
© www.soinside.com 2019 - 2024. All rights reserved.