对于CheckedListBox中的每个<item>。 <item>以Object形式返回,而不是Control </item> </item>

时间:2010-03-24 03:18:35

标签: vb.net object foreach controls checkedlistbox

我之前填充了CheckedListBox。我希望通过CheckedListBox中的所有项循环“for each / next”,并对checkedlistbox的每个迭代元素执行大量“填充”操作。

示例代码:

    For Each item In CheckedListBox1.Items

        If item.Checked = True Then

            'do stuff like
            item.BackColor = Color.Blue

        Else

            'do other stuff
            item.BackColor = Color.Brown

        End If

    Next

问题是“对象”类型而不是“控件”类型。如果我强制迭代var As CheckBox,它会抛出一个InvalidCastException,说'System.String'类型不能与'System.Windows.Forms.CheckBox'类型相关联。

我知道我可以很容易地解决这个问题,但是我想在每个/下一个循环中使用a,因为我在该循环中有很多代码(而且不能使用)并且总是直接对对象进行直接处理我希望避免,我真的需要代码尽可能简单。

我实际上花了一个下午寻找这个,但找不到任何答案。

2 个答案:

答案 0 :(得分:8)

CheckedListBox不是CheckBox控件的集合 它没有包装器对象的集合。

CheckedListBox控件是一个简单的控件,只能显示一个简单的项列表;听起来你正在寻找更强大的东西。 (例如,如果没有所有者绘图,则无法更改单个项目的背景颜色)

您应该使用ListViewCheckBoxes属性设置为true) 然后,您可以遍历其ListViewItem集合中的Items个实例。

答案 1 :(得分:1)

For Each item In SuppliersCheckList.CheckedItems
        If SuppliersCheckList.GetItemCheckState(SuppliersCheckList.Items.IndexOf(item)) Then
            MsgBox(item.ToString)
        End If
Next