6

我正在尝试检查已选中列表框中的每个项目,并根据是否选中该项目来处理该项目。我已经能够使用 indexCollection 获取已检查的项目,但我无法获取所有项目,我收到此错误“无法将类型为“System.String”的对象转换为类型“System.String”。 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 行中给我字符串转换错误。我怎样才能做到这一点?谢谢。

4

3 回答 3

7

如果您允许复选框具有 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
}        

否则足以调用返回真/假值的GetItemChecked (对于不确定状态也为真)

于 2013-02-14T10:40:28.660 回答
2

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]
            }
        }
于 2013-02-14T10:32:26.773 回答
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
}        

否则足以调用返回真/假值的GetItemChecked (对于不确定状态也为真)

于 2013-05-29T11:39:37.733 回答