迭代通过checkedListBox测试检查 - 转换错误

时间:2013-02-14 10:22:28

标签: winforms foreach checkedlistbox

我正在尝试检查已检查列表框中的每个项目,并根据项目是否已选中对项目执行某些操作。我已经能够使用indexCollection获取已检查的项目,但是我无法获取所有项目,我收到此错误'无法将类型为'System.String'的对象强制转换为'System'。 Windows.Forms.ListViewItem'

        foreach (ListViewItem item in checkedListBox2.Items)
        {
            if (item.Checked == true)
                //do something with item.name

            else
                //do something else with item.name
        }

我不确定为什么它会在foreach行中给我字符串转换错误。我怎么能做到这一点?感谢。

3 个答案:

答案 0 :(得分:5)

如果您允许复选框具有Indeterminate状态,则应使用GetItemCheckState方法检索复选框的状态

for (int i = 0; i < checkedListBox2.Items.Count; i++) 
{
     CheckState st = checkedListBox2.GetItemCheckState(checkedListBox2.Items.IndexOf(i));
     if(st == CheckState.Checked)
        ....
     else if(st == CheckState.Unchecked)
        ....
     else
        ... // inderminate
}        

否则足以调用返回true / false值的GetItemChecked(对于不确定状态也是如此)

答案 1 :(得分:1)

CheckedListBox.Items包含objects的集合,而不是ListViewItem的集合

你可以这样检查

        for (int i = 0; i < checkedListBox2.Items.Count; i++)
        {
            if (checkedListBox2.GetItemChecked(i))
            {
                //do something with checkedListBox2.Items[i]
            }
            else
            {
                //do something else with checkedListBox2.Items[i]
            }
        }

答案 2 :(得分:1)

如果您允许复选框具有Indeterminate状态,则应使用GetItemCheckState方法检索复选框的状态

for (int i = 0; i < checkedListBox2.Items.Count; i++) 
{
     CheckState st = checkedListBox2.GetItemCheckState(i);
     if(st == CheckState.Checked)
        ....
     else if(st == CheckState.Unchecked)
        ....
     else
        ... // inderminate
}        

否则足以调用返回true / false值的GetItemChecked(对于不确定状态也是如此)