从选中的列表框中删除所选项目

时间:2014-08-13 15:00:51

标签: c# winforms checkedlistbox

我编写了一个代码,将第一个checkedlistbox中的选定项目转移到另一个checkedlistbox。这部分代码可以工作(但是我仍然需要找到一种方法,所以相同的选项不会一遍又一遍地写入。)我的第二个目标是从第一个checkedlistbox中删除所选项目。我得到的错误是数组超出范围。

private void button_ekle_Click(object sender, EventArgs e)
{   
        int i = 0;
        int k = 0;
        i = clb_input.Items.Count; 
        //the number of items in the first checkedlistbox
        for (k = 0; k <i; k++)
        {
            if (clb_input.GetItemChecked(k) == true)
            {   
               //clb_output is the second checkedlistbox

                clb_output.Items.Add(clb_input.Items[k]);
                clb_input.Items.Remove(clb_input.CheckedItems[k]);
                i--;
            }
            else { }
        }
}

1 个答案:

答案 0 :(得分:4)

您的问题是由在CheckedItems集合上使用索引器k引起的 CheckedItems集合的元素可能少于Items集合的计数,因此索引器可能具有CheckedItems集合中未包含的值。

然而,当你需要这种代码时,通常会反转循环 从结束开始走向开始

private void button_ekle_Click(object sender, EventArgs e)
{   
    for (int k = clb_input.Items.Count - 1; k >= 0; k--)
    {
        if (clb_input.GetItemChecked(k) == true)
        {   
            clb_output.Items.Add(clb_input.Items[k]);

            // Remove from the Items collection, not from the CheckedItems collection
            clb_input.Items.RemoveAt(k);
        }
        else { }
    }
}

您还应该记住,当您希望使用传统的for循环遍历集合时,您的限制索引值是项目数小于1,因为NET中的每个集合都从索引0开始。所以,如果您有一个集合有10个项目,有效索引从0到9。