我在删除一个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 中。其他信息: 索引超出范围。必须为非负值并小于集合大小。
请高手指教原因何在?谢谢!
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 中。其他信息: 索引超出范围。必须为非负值并小于集合大小。
请高手指教原因何在?谢谢!
解决方案 »
- C# WinForm 怎样实现“目标另存为”
- datagridview定位
- IList<Categories> Categories 是什么意思
- 谁会用xml和xslt动态生成窗体上的控件(程序的可定制性,试用与二次开发啊)????大家类讨论讨论这个问题啊
- 怎么样让aspx的客户端查看源代码看到的是XML文件,aspx返回的是xml文件
- 在DataGrid(Windows)中,我选中一行,我通过什么方法才能行到这一行的数据并显示出来!
- 为什么C#.NET调用WebService的时候 progressBar就没有反应了呢????
- C# 中如何取二维数组的指定一维作为参数传递
- 请各位给我推荐一本xmlWebServer 的入门图书,最好能有很多例子的!
- 如何写自己的form类?
- 急需C#的朋友帮忙,在线等待。
- 请问如何在C1FlexGrid中设置某个单元格不可编辑?急!
{
。。
}改为for(int k = this.arrayCoop.Count - 1;k>=0 ;k--)
{
...
}
现在有两个listbox,一个lstAll,一个lstChoose,现在需要把lstAll中的内容选到lstChoose中,或者从已经选择的lstChoose中删除选定的项。
【其中lstAll中的内容是直接从数据集中读出,即设置lstAll.DataSource】
我的设计思路是,先设计一个类A,内有两个字段,一个int类型,以后作为listbox的valuemember,一个string类型,以后作为listbox的displaymember。然后建立动态数组,其中的每个元素为选中的lstAll中的item,因为其格式为DataRowView,但内容也为int和string,故依次取出其内容,生成类A的实例,作为此动态数组的元素。
在向lstChoose中添加内容时候,我先修改动态数组的内容,然后设置lstChoose的datasource为null,再设置为此数组,即相当于更新一下,一切运行正常。
依照此思路减少lstChoose中的内容。在运行的时候,如果我是从上到下依次删除lstChoose中选定的项时候,没问题。但是,如果我从中间任一项目向下删除或者一开始就删除lstChoose中最底端的选项时候,删除时候没有问题,但是,当我再用鼠标去选择lstChoose中剩余的选项的时候,即出现以下错误:
未处理的“System.ArgumentOutOfRangeException”类型的异常出现在 mscorlib.dll 中。其他信息: 索引超出范围。必须为非负值并小于集合大小。请高手指教问题到底出在哪里?
结贴。