2

我有这个 vb.net 代码,我在其中使用 foreach 循环复选框

但问题是它从 Checkbox 19 到 1 开始,但我想从 Checkbox1 到 19 开始执行此操作

Dim i = 0
For Each myControl As CheckBox In Me.Controls
    myControl.Text = Form1.DataGridView1.Columns(i).HeaderText
    myControl.Checked = My.Settings("HC" & i)
i+=1
Next

那么如何使用正常的for循环执行上述代码,我不确定如何使用正常的for循环来循环控制


所以这是新的工作代码

Option Strict On
Option Infer On



 For i= 1 To 19
        Dim myControl = DirectCast(Me.Controls("CheckBox" + i.ToString()), CheckBox)
        myControl.Text = Form1.DataGridView1.Columns(i).HeaderText
        MsgBox(i)
        myControl.Checked = CBool(My.Settings("HC" & i))
    Next
4

2 回答 2

6

使用普通For循环,您需要手动构造复选框名称:

For i = 1 To 19
    Dim myControl = DirectCast(Me.Controls("checkbox" + i.ToString()), CheckBox)
    ... ' do something with myControl
Next

这使用ControlCollection 索引器按名称访问控件,然后将控件强制转换为,以便可以为变量CheckBox推断正确的类型。myControl

(显然,代码示例假定Option Strict OnOption Infer On。)

于 2012-08-07T06:01:54.433 回答
1

您实际上需要整数循环变量,但如果您不需要,您可以使用 LINQ:

 For Each cb In (From c In Controls.OfType(Of CheckBox) Order By CInt(Mid(c.Name, Len("checkbox") + 1)) Select c)
于 2012-08-07T12:07:18.017 回答