我在删除一个listbox中的item时候,采用以下函数:
private void btnRemoveCooperators_Click(object sender, System.EventArgs e)
{
int coopId;
for(int i=0;i<this.lstCooperatorsChoose.SelectedItems.Count;i++)
{
coopId=int.Parse(((CooperatorAll)(this.lstCooperatorsChoose.SelectedItems[i])).CooperatorId.ToString());
//MessageBox.Show(coopId.ToString());
for(int k=0;k<this.arrayCoop.Count;k++)
{
if(((CooperatorAll)(this.arrayCoop[k])).CooperatorId==coopId)
{
this.arrayCoop.RemoveAt(k);
break;
}
}
}
//MessageBox.Show(this.lstCooperatorsChoose.SelectedIndex.ToString());
this.lstCooperatorsChoose.DataSource=null;
this.lstCooperatorsChoose.DataSource=arrayCoop;
this.lstCooperatorsChoose.DisplayMember="CooperatorName";
this.lstCooperatorsChoose.ValueMember="CooperatorId";
}
当运行起来后,顺着依次删除的时候,没有问题。可是,每当我从中间任一个项删除后,依次删除到最后,然后我再返回选择上面没有删除的项目时候,就出现如下错误:
未处理的“System.ArgumentOutOfRangeException”类型的异常出现在 mscorlib.dll 中。
其他信息: 索引超出范围。必须为非负值并小于集合大小。
请高手指教原因何在?谢谢!
for(int k=0;k<this.arrayCoop.Count;k++)
{
。。
}
改为
for(int k = this.arrayCoop.Count - 1;k>=0 ;k--)
{
...
}