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

listView1.SelectedItems选中行要注意count>0[通俗易懂]在右边的ListView中选中一行,就把选中行的第二列里的值显示在textBox里 。但是当我第一次选择一行时没有什么问题,当我第二次选择一行时就出现下面的错误:未处理ArgumentOutOfRangeException InvalidArgument=“0”的值对于“index”无效。  参数名:index上网查找说是要加一句判断if(listView1.

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

在右边的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。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SNMP Trap调试记录[通俗易懂]

    SNMP Trap调试记录[通俗易懂]目录一、Trap与Inform二、Trap1、Agent端工作流程2、Manager端工作流程3、流程图三、调试四、SNMP中预定义的trap一、Trap与InformSNMPInformRequests功能允许路由器向SNMP管理器发送通知请求。路由器可以在发生特定事件时向SNMP管理器发送通知。例如,代理路由器可能在自身遇到错误情况时向管理器发…

  • 《Python 快速入门》C站最全Python标准库总结

    《Python 快速入门》C站最全Python标准库总结❤粉丝福利:免费下载海量【PPT模板、简历模板、学习资料】

  • java浅拷贝和深拷贝的区别_python的浅拷贝和深拷贝

    java浅拷贝和深拷贝的区别_python的浅拷贝和深拷贝Java中的对象拷贝(ObjectCopy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。举例说明:比如,对象A和对象B都属于类S,具有属性a和b。那么对对象A进行拷贝操作赋值给对象B就是:B.a=A.a;B.b=A.b;在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部数据。Java中的对象拷贝主要分为:浅拷贝(ShallowCopy)、深拷贝(DeepCopy)。先介绍一点铺垫知识:Java中的数据类型分为基本数据类型和.

  • 计算机毕业设计Java校园租赁系统的设计与实现(源码+系统+mysql数据库+Lw文档)[通俗易懂]

    计算机毕业设计Java校园租赁系统的设计与实现(源码+系统+mysql数据库+Lw文档)[通俗易懂]计算机毕业设计Java校园租赁系统的设计与实现(源码+系统+mysql数据库+Lw文档)计算机毕业设计Java校园租赁系统的设计与实现(源码+系统+mysql数据库+Lw文档)最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品可领qu参考你的选题刚好在下面有,有时间看到机会给您发【1】 jspNBA篮球资讯网 【2】 ssm社区便捷管理系统 【3】 ssm阳明湖风景区订票系统 【4】 ssm农家乐信息平台 【5】 ssm+sqlserv

  • vci驱动安装_deviceiocontrol函数

    vci驱动安装_deviceiocontrol函数1.获取所有的驱动器利用函数GetLogicalDriveStringsTheGetLogicalDriveStringsfunctionfillsabufferwithstringsthatspecifyvaliddrivesinthesystem.DWORDGetLogicalDriveStrings(DWORDnBufferLength

  • 魔兽世界 | 宏命令教程

    魔兽世界 | 宏命令教程前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、什么是宏命令有了宏命令,可以很大程度的解放双手,开启懒人脸滚键盘模式,本篇文章就简单讲解一下基本宏指令,并尝试完成一套一件输出宏二、基本宏速查表#showtooltip多用于宏命令的开头,让按钮显示技能的说明和技能的图标/castxxx施放技能,如/

    2022年10月24日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号