关于SelectedItems的问题
在做俄罗斯方块的时候写了以下一段代码:
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
string strsel = this.listView1.SelectedItems[0].Text;
for (int i = 0; i < strsel.Length; i++)
{
bArray[i / 5, i % 5] = (strsel[i] == '1') ? true : false;
}
this.label1.Invalidate();
}
就是在右边的ListView中选中一行,就在左边还原为砖块图案。可是当我第一次选择一行时没有什么问题,当我第二次选择一行时就出现以下的错误:
未处理ArgumentOutOfRangeException
InvalidArgument=“0”的值对于“index”无效。
參数名: index
上网查找说是要加一句推断
if(listView1.SelectedItems.Count > 0)
{
}
可是我不知道为什么要加这句推断。于是决定自己去寻找答案..........
经过多次測试,发现一个“秘密”。我新建了一个project,窗口中仅仅放了一个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,即选中了一行。选择多行的时候也是相似的,一个看似非常easy的过程事实是分多步进行的。这就是错误的根源所在,所以我们在引用SelectedItems的时候要先做一个推断,看SelectedItems.Count是否大于0。
不论什么错误都是有它的原因的,仅仅要我们坚持就一定可以找到错误的根源。
关于SelectedItems的问题的更多相关文章
- WPF Datagrid multiple selecteditems in MVVM
I can assure you: SelectedItems is indeed bindable as a XAML CommandParameter After a lot of digging ...
- SelectedItems的用法讲解
在做俄罗斯方块的时候写了下面一段代码: private void listView1_SelectedIndexChanged(object sender, EventArgs e) ...
- PyQt(Python+Qt)学习随笔:QTableWidget的findItems和selectedItems搜索项和访问选中项方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.搜索项 在表格部件中,可以根据文本以及匹配模式来搜索满足条件的项,调用语法: list[QTab ...
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中当前列currentColumn和选中项selectedItems访问方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 当前列访问方法 树型部件QTreeWidget的currentColumn()方法返回当前项中得到焦 ...
- PyQt(Python+Qt)学习随笔:QListWidget获取当前选中项的selectedItems方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListWidget的selectedItems方法返回列表部件中所有选中项的一个列表,调用语法如 ...
- .NET平台和C#编程的总结
第一章 简单认识.NET框架 (1)首先我们得知道 .NET框架具有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework ...
- 深入.NET平台和C#编程总结大全
对于初学者的你,等到你把这个看完之后就更清楚地认知.NET和C#编程了,好了废话不多说,开始吧! ...
- CloudNotes之桌面客户端篇:插件系统的实现
[CloudNotes版本更新历史与各版本下载地址请点击此处] [CloudNotes中文系列文章汇总列表请点击此处] [查看CloudNotes源代码请点击此处] 有时候,同一个名词,针对不同的人群 ...
- 利用WCF的双工通讯实现一个简单的心跳监控系统
何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...
随机推荐
- 用DOS命令获取文件列表
其实就是两个命令:dir 跟 tree 在C:盘根目录下生成了一个名为“filelist.txt”的文本文件,该文件中即包含D:盘的文件夹列表. dir d:\ >c:\filelist.txt ...
- 求Sn=a+aa+aaa+…+aa…aaa(有n个a)…
时间限制: 1 Sec 内存限制: 128 MB 提交: 352 解决: 174 [提交][状态][讨论版] 题目描述 求Sn=a+aa+aaa+-+aa-aaa(有n个a)之值,其中a是一个数字 ...
- Effective C++笔记05:实现
条款26:尽可能延后变量定义式的出现时间 博客地址:http://blog.csdn.net/cv_ronny 转载请注明出处! 有些对象,你可能过早的定义它,而在代码运行的过程中发生了导常,造成了開 ...
- 花生壳宣布网站的网址直接绑定到详细的项目——jboss版本
花生壳公布,首先要有域名.然后激活域名,详细的公布就不说了,网上有非常多资料,这里是在jboss下直接将网址与详细的项目相应.做法有点不地道 假设跟图上一样配置的话.訪问网址相当于訪问的是http:/ ...
- 探索Windows Azure 监控和自动伸缩系列3 - 启用Azure监控扩展收集自定义监控数据
上一篇我们介绍了获取Azure的监控指标和监控数据: http://www.cnblogs.com/teld/p/5113376.html 本篇我们继续:监控虚拟机的自定义性能计数器. 随着我们应用规 ...
- 【转】JAVA Socket用法详解
一.构造Socket Socket的构造方法有以下几种重载形式: (1)Socket() (2)Socket(InetAddress address, int port)throws UnknownH ...
- IE不能上网、有道云笔记不能联网、各种软件主页不能联网解决办法一
其他的办法我几乎都试过了,读者可以无搜一下,我的问题是,我用Lantern.exe,所以只要打开这个就可以了! 我一直不知道是这个问题,困扰了好久QAQ
- SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件
原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail ...
- HTTP状态管理机制之Cookie(转)
一.cookie 起源 cookie 最早是网景公司的雇员 Lou Montulli 在1993年3月发明,后被 W3C 采纳,目前 cookie 已经成为标准,所有的主流浏览器如 IE.Chrome ...
- Linux 字符驱动程序(一)
Linux 字符驱动程序(一) 于linux有三个主要的内核设备: 1 字符设备: •字符设备的读写以字节为单位,存取时没有缓存. •对字符设备发出读写请求时.实际的硬件I/ ...