前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >listView1.SelectedItems选中行要注意count>0[通俗易懂]

listView1.SelectedItems选中行要注意count>0[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-14 16:08:32
7250
发布2022-09-14 16:08:32
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

在右边的ListView中选中一行,就把选中行的第二列里的值显示在textBox里 。但是当我第一次选择一行时没有什么问题,当我第二次选择一行时就出现下面的错误:

未处理ArgumentOutOfRangeException

InvalidArgument=“0”的值对于“index”无效。 参数名: index

上网查找说是要加一句判断

if(listView1.SelectedItems.Count > 0) { }

但是我不知道为什么要加这句判断。于是决定自己去寻找答案……….

经过多次测试,发现一个“秘密”。我新建了一个工程,窗体中只放了一个ListView,然后在SelectedIndexChanged事件中只加了一句代码:

private void listView1_SelectedIndexChanged(object sender, EventArgs e) { int c=this.listView1.SelectedItems.Count; }

的是想看一下c=this.listView1.SelectedItems.Count的变化情况,第一次选择一行的时候,c=1,第二次选择一行的时候,执行了两遍SelectedIndexChanged事件,第一遍c=0,第二遍c=1,错误的根源就在第一遍执行SelectedIndexChanged事件的过程中。

然后我又选择多行进行测试,比如3行,那么SelectedIndexChanged事件就执行了4遍,第一遍c=0,第二遍c=1,第三遍c=2,第四遍c=3。

从上面的测试我得出了以下结论:

当第二次选择一行的时候,他是先把前一次选中的那一行取消,取消之后选中的行数c=this.listView1.SelectedItems.Count就变为了0(这时SelectedItems中没有内容,而去引用它,当然会出错),然后再去选中我们要选中的行,此时c=this.listView1.SelectedItems.Count又变为了1,即选中了一行。选择多行的时候也是类似的,一个看似很简单的过程事实是分多步进行的。这就是错误的根源所在,所以我们在引用SelectedItems的时候要先做一个判断,看SelectedItems.Count是否大于0。

任何错误都是有它的原因的,只要我们坚持就一定能够找到错误的根源。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158275.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档