C# 4.0 从listview中删除项目时发生Outofrange异常
我有一个listview,它有多行,并且启用了复选框。我试图编写一个代码,在取消选中项目复选框时删除项目,因为默认情况下选中了项目复选框 在itemcheck事件中C# 4.0 从listview中删除项目时发生Outofrange异常,c#-4.0,C# 4.0,我有一个listview,它有多行,并且启用了复选框。我试图编写一个代码,在取消选中项目复选框时删除项目,因为默认情况下选中了项目复选框 在itemcheck事件中 If(list.Focused == true) { If (e.newvalue == checkState.unchecked) { list.items.removeAt( e.index); list.Refresh(); } } 我得到一个outofrange异常,1不是有效的索引 “1”指我删除的项目的索引您必须
If(list.Focused == true)
{
If (e.newvalue == checkState.unchecked)
{
list.items.removeAt( e.index);
list.Refresh();
}
}
我得到一个outofrange异常,1不是有效的索引
“1”指我删除的项目的索引您必须测试索引是否在范围内(因为集合缩小)。在删除元素之前添加此测试:
if(list.items.count < e.index && e.index > 0)
if(list.items.count0)
这是检查事件中的解决方案,您有当前值和新值。如果您删除项目,则在检查事件完成之前,不会应用新值。该类将抛出范围,因为它试图分配已删除项目的属性
您可以使用列表在选中的事件中添加项目,并在选中的事件中删除项目并清除列表我觉得还可以。你能检查一下,这个事件没有因为任何错误被多次调用吗?程序主方法中的异常不在事件中你所说的主方法是什么意思。你能分享相关代码吗?例外情况来自Application.Run(新表单());我认为您共享的代码没有任何问题。可能您必须共享正确的代码段。如果不确定,则发布完整的表单代码。如果索引为0,此代码如何工作,以及如何索引>计数有时您的事件会触发两次。在这种情况下,ListView中不再存在e.index..它在事件结束前出现异常lambda expretionI分配的事件没有看到任何lambda表达式,请发布您的所有代码。另外,您可以尝试使用remove而不是removeat来抑制by object…阅读我在文章中的最后一条评论