读书人

C# CheckedListBox移除打钩项的有关问

发布时间: 2013-03-13 10:56:58 作者: rapoo

C# CheckedListBox移除打钩项的问题
我使用OldCheckListBox.Items.Remove(OldCheckListBox.CheckedItems[i]);函数只能把值去掉,然后又出现异常了,说索引超出了数组界限,怎么解决这个问题,



public static void GetListFromCheckListBoxToAnother(CheckedListBox OldCheckListBox, CheckedListBox TargetCheckListBox)
{

for (int i = 0; i < OldCheckListBox.CheckedItems.Count; i++)
{
bool CheckItem = false;
for (int j = 0; j < TargetCheckListBox.Items.Count; j++)
{
if (OldCheckListBox.CheckedItems[i].ToString()==TargetCheckListBox.Items[j].ToString())
{
CheckItem = true;
break;
}
}
if (CheckItem == true)
{

}
else
{
OldCheckListBox.Items.Remove(OldCheckListBox.CheckedItems[i]);

TargetCheckListBox.Items.Add(OldCheckListBox.CheckedItems[i].ToString());
}
}
}
c#
[解决办法]
因为你remove一次,OldCheckListBox.CheckedItems.Count实际会减少一次,而你i往后增加,会导致超出OldCheckListBox.CheckedItems.Count值

举个例子,刚开始OldCheckListBox.CheckedItems.Count=3,相当于
for(int i=0;i<3;i++)
OldCheckListBox.CheckedItems.Remove(i); //你想想,到i=2时,这句是不是要报错?

而倒过来循环就不会了

读书人网 >C#

热点推荐