在c#中,listView控件使用过程中,在二次选择的问题上很容易出异常,
举例如下:一个新建窗体中只有一个listView控件
代码如下
InBlock.gif private void Form1_Load( object sender, EventArgs e)
InBlock.gif                {
InBlock.gif                        listView1.Items.Add( "第一项");
InBlock.gif                        listView1.Items.Add( "第二项");
InBlock.gif                        listView1.Items.Add( "第三项");
InBlock.gif                        listView1.Items.Add( "第四项");
InBlock.gif                        listView1.Items.Add( "第五项");
InBlock.gif                }
InBlock.gif
InBlock.gif                 private void listView1_DoubleClick( object sender, EventArgs e)
InBlock.gif                {
InBlock.gif                        MessageBox.Show( "您选择了"+listView1.SelectedItems[0].Text);
InBlock.gif                }
InBlock.gif
InBlock.gif                 private void listView1_SelectedIndexChanged( object sender, EventArgs e)
InBlock.gif                {
InBlock.gif                        MessageBox.Show( "您选择了" + listView1.SelectedItems[0].Text);
InBlock.gif                }
这样的话,我们第一次点击listview中的项时会正常显示messbox,但是第二次就会爆异常
如下图: 4efee3ecf89902cbb3fb95f5.jpg
百度了一下午,终于明白,listView 的selectindexChange事件每次都要执行两次,第一次将选择的数目,就是selectitems.count清空,然后才重新指定,所以在第二次里selectitems.count =0 ,也就是没有选择任何项,所以报了index异常.
解决办法:在selectindexchange事件中,用If语句屏蔽一地此indexchange的一地此执行
即将代码改为:
InBlock.gif private void listView1_SelectedIndexChanged( object sender, EventArgs e)
InBlock.gif                {
InBlock.gif                         if (listView1.SelectedItems.Count==0)
InBlock.gif                        {
InBlock.gif
InBlock.gif                             //屏蔽第一次改变
InBlock.gif
InBlock.gif                        }
InBlock.gif                         else
InBlock.gif                        {
InBlock.gif                         MessageBox.Show( "您选择了" + listView1.SelectedItems[0].Text);
InBlock.gif                        }
InBlock.gif                        
InBlock.gif                }
问题就解决咯