VB.Net foreach反向循环控制

时间:2012-08-07 05:53:57

标签: vb.net foreach

我有这个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循环遍历contols


所以这是新的工作代码

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

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:1)

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

 For Each cb In (From c In Controls.OfType(Of CheckBox) Order By CInt(Mid(c.Name, Len("checkbox") + 1)) Select c)