zoukankan      html  css  js  c++  java
  • 关于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。

    不论什么错误都是有它的原因的,仅仅要我们坚持就一定可以找到错误的根源。

  • 相关阅读:
    linux删除/var/log/下面所有日志 如何重新记录日志
    DIV里的内容自动换行
    it冲突:commit your changes or stash them before you can merge. 解决办法
    git切换到远程分支
    【异常】warning: refname 'feature1.3.0' is ambiguous.导致git merge失败
    在此篇文章中,我们将用 15 分钟对 PHP v7.x 版本更改进行简要回顾
    input元素所有type类型及相关作用
    微信自动关闭内置浏览器页面,返回公众号窗口 WeixinJSBridge.call('closeWindow')
    css背景渐变色
    数组的forEach和map和for方法的区别
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4288281.html
Copyright © 2011-2022 走看看