2

私はこのvb.netコードを持っており、foreachを使用してチェックボックスをループしています

しかし、問題はそれがチェックボックス19から1まで始まることですが、私はこれをチェックボックス1から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 OnしていOption 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 に答える