我有这个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
答案 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 On
和Option 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)