我编写了一个代码,将第一个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 { }
}
}
答案 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。