vb.net - 对于 CheckedListBox 中的每个 <item>。 <item> 作为对象返回,而不是作为控件返回

标签 vb.net object foreach controls checkedlistbox

我之前填充了一个 CheckedListBox。我想使用“for every/next”循环遍历 CheckedListBox 中的所有项目,并对 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 every/next 循环,因为我在该循环中有很多代码(并且无法使用 With)并且总是直接指向对象是这样的我希望避免,并且我确实需要代码尽可能简单。

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

最佳答案

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

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

您应该使用 ListView(将 CheckBoxes 属性设置为 true)。
然后,您可以循环访问其 Items 集合中的 ListViewItem 实例。

关于vb.net - 对于 CheckedListBox 中的每个 <item>。 <item> 作为对象返回,而不是作为控件返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2505119/

相关文章:

javascript - 数组上的 .forEach() 与 NodeList (JavaScript)

c# - VB 中的 COM 对象数组

java - Iterator.hasNext 和 for-each 循环之间有什么关系吗

sql - 如何检查表中的列数据是否存在于同一个表中?

javascript - 对象数组不断覆盖以前的条目

java - 在 Main[JAVA] 中用另一种类型的对象替换对象

c# - 在 unity 3d 中删除对象的 Box collider

Java foreach - 通过 ArrayList 进行搜索

javascript - 创建类型为 ="image"的 &lt;input&gt;,它重定向到另一个带参数的 aspx 页面

c# - 如何在 Dataset DataTable 中显示 DataColumns