List(Of Checkbox) で特定のチェックボックス名を検索する方法を見つけようとして苦労しています。既存のリストを検索し、特定の名前に一致するチェックボックスを別のリストに追加したいと考えています。既存のリストに、chkClass11、chkClass12、chkClass21 などの名前のチェックボックスを追加しました。
私のコードは次のとおりです。
Dim lstCheckboxes As New List(Of CheckBox)
Dim lstGroupCheckboxes As New List(Of CheckBox)
Do While intNextGroupNumber <= intTotalGroups
Dim grpNewGroupBox = New GroupBox
grpNewGroupBox.Name = "grpGroup" & intNextGroupNumber
grpNewGroupBox.Text = "Group " & intNextGroupNumber
grpNewGroupBox.Location = New Point(intCurrentXPosition, intCurrentYPosition)
grpNewGroupBox.Size = New Size(intGroupBoxWidth, intGroupBoxHeight)
grpNewGroupBox.AutoSize = True
strGroupBoxNameAddArray(intArrayLocation) = "grpGroup" & intNextGroupNumber
Do While intCurrentRow < intTotalRows
Dim chkClassCheckBox = New CheckBox
chkClassCheckBox.Name = "chkClass" & intNextGroupNumber & intCurrentRow
chkClassCheckBox.Text = m_DataTableClass.Rows(intCurrentRow).Item("ClassName")
chkClassCheckBox.Location = New Point(intCurrentXPosition, intCurrentCBYPosition)
grpNewGroupBox.Controls.Add(chkClassCheckBox)
lstCheckboxes.Add(chkClassCheckBox)
intCurrentCBYPosition += 30
intCurrentRow += 1
intArrayLength += 1
Loop
Me.Controls.Add(grpNewGroupBox)
strGroupNamesArray(1, intNextGroupNumber - 1) = grpNewGroupBox.Name ' Add group names to array to sort checked checkboxes into
intCurrentRow = 0
intNextGroupNumber += 1
intCurrentGroupBoxHeight = grpNewGroupBox.Height
intCurrentYPosition = intCurrentYPosition + intCurrentGroupBoxHeight + 50
intCurrentCBYPosition = 15
intArrayLocation += 1
Loop
intArrayLocation = 0
'Search strGroupBoxNameArray for next group and then insert strGroupBoxNameAddArray values
For Each Group In strGroupBoxNameAddArray
intClassNumber = 1
Try
strGroupName = strGroupBoxNameAddArray(intArrayLocation)
intGroupNumber = Microsoft.VisualBasic.Right(strGroupName, 1)
If Not dicGroups.ContainsKey(Group) Then
Do
Try
strCheckBoxName = "chkClass" & intGroupNumber & intClassNumber
If lstCheckboxes.Contains(strCheckBoxName) Then
lstGroupCheckboxes.Add(lstCheckboxes.Item("chkClass" & intGroupNumber & intClassNumber))
Else
Exit Do
End If
intClassNumber += 1
Catch
MessageBox.Show(ErrorToString)
Exit Do
End Try
Loop
dicGroups.Add(Group, lstGroupCheckboxes)
End If
intArrayLocation += 1
Catch
MessageBox.Show(ErrorToString)
Exit For
End Try
Next
リストに関する適切な参考資料はありますか? リストがどのように機能するかを正確に説明する資料を見つけるのに苦労しています。
ありがとう!
私は以下を置き換えました:
Do
Try
strCheckBoxName = "chkClass" & intGroupNumber & intClassNumber
If lstCheckboxes.Contains(strCheckBoxName) Then
lstGroupCheckboxes.Add(lstCheckboxes.Item("chkClass" & intGroupNumber & intClassNumber))
Else
Exit Do
End If
intClassNumber += 1
Catch
MessageBox.Show(ErrorToString)
Exit Do
End Try
Loop
以下を使用します。
lstGroupCheckboxes.AddRange(lstCheckboxes.Where(Function(cb) cb.Name.StartsWith("chkClass" & intGroupNumber)))
しかし、次の行に問題があります。
dicGroups.Add(Group, lstGroupCheckboxes)
このディクショナリ キーにリスト lstCheckboxes を入力する際に問題はありませんでしたが、新しいリスト lstGroupCheckboxes を入力する際に問題が発生しただけです。新しいリストの形式に何か問題がありますか?