9

我以前填充了一个 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”相关联

我知道我可以轻松解决这个问题,但我想使用 for each /next 循环,因为我在该循环中有很多代码(并且无法使用 With )并且总是直接指向对象是我希望的避免,我真的需要代码尽可能简单。

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

4

2 回答 2

8

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

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

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

于 2010-03-24T03:27:34.413 回答
2
For Each item In SuppliersCheckList.CheckedItems
        If SuppliersCheckList.GetItemCheckState(SuppliersCheckList.Items.IndexOf(item)) Then
            MsgBox(item.ToString)
        End If
Next
于 2016-04-16T21:56:57.690 回答