C# listview中选定索引的问题

C# listview中选定索引的问题,c#,winforms,listview,arraylist,C#,Winforms,Listview,Arraylist,我有一个arraylist,其中包含我自己类的对象。我想从数组列表中获取对象,该列表的索引为listview的selectedindex 我试过这个: TrackInformation t=(TrackInformation) SongList[listView1.SelectedIndices[0]]; TrackInformation是我的类,SongList是TrackInformation类型的ArrayList listview1不允许选择多个索引,因此我需要SelectedDice

我有一个arraylist,其中包含我自己类的对象。我想从数组列表中获取对象,该列表的索引为listview的selectedindex

我试过这个:

TrackInformation t=(TrackInformation) SongList[listView1.SelectedIndices[0]];
TrackInformation是我的类,SongList是TrackInformation类型的ArrayList

listview1不允许选择多个索引,因此我需要SelectedDices集合的第一个元素


我正在获取ArgumentOutOfRangeException,它说“0”的值对“索引”无效。

错误是因为listView1.SelectedDices为空,是否选择了一行

你可能想做个测试

ListView.SelectedIndexCollection selected=listView1.SelectedIndicies;

if (selected.Count==0) {
 // code for no items selected
} else {
  TrackInformation t=(TrackInformation) SongList[selected[0]]; 
  // rest of code to deal with t
}

错误是因为listView1.SelectedDices为空,是否选择了一行

你可能想做个测试

ListView.SelectedIndexCollection selected=listView1.SelectedIndicies;

if (selected.Count==0) {
 // code for no items selected
} else {
  TrackInformation t=(TrackInformation) SongList[selected[0]]; 
  // rest of code to deal with t
}

将这一行放在代码之前-

if(listView1.SelectedIndices.Count > 0)
{
   TrackInformation t=(TrackInformation) SongList[listView1.SelectedIndices[0]];
}

将这一行放在代码之前-

if(listView1.SelectedIndices.Count > 0)
{
   TrackInformation t=(TrackInformation) SongList[listView1.SelectedIndices[0]];
}

ListView.SelectedIndexChanged事件有一个怪癖,它会轰炸您的代码。启动程序时,未选择任何项目。单击某个项目并选择“索引已更改”,没有问题。现在单击另一项,事件将触发两次。首先让您知道,第一个项目未选中,这对您毫无帮助。然后再次通知您新项目已被选中。第一个事件将使您索引一个空数组kaboom。RV1987的代码段阻止了这种情况。

ListView.SelectedIndexChanged事件有一个怪癖,它会轰炸您的代码。启动程序时,未选择任何项目。单击某个项目并选择“索引已更改”,没有问题。现在单击另一项,事件将触发两次。首先让您知道,第一个项目未选中,这对您毫无帮助。然后再次通知您新项目已被选中。第一个事件将使您索引一个空数组kaboom。RV1987的代码段阻止了这一点。

您确定在您的UI上选择了任何项目吗?异常本身表示未在UI上选择任何项。在这种情况下,只有索引可以超出范围。代码写在listview1\u SelectedIndexChanged中,因此是的,肯定选择了一个项目。在这种情况下,当您从UI取消选择该项目时,也会引发选择更改事件。尝试使用Ctrl+鼠标单击所选项目,在这种情况下,事件也将引发。因此,在调用代码之前,您需要检查iListView1.SelectedIndices.Count>0是否确实在您的UI上选择了任何项目?异常本身表示未在UI上选择任何项。在这种情况下,只有索引可以超出范围。代码写在listview1\u SelectedIndexChanged中,因此是的,肯定选择了一个项目。在这种情况下,当您从UI取消选择该项目时,也会引发选择更改事件。尝试使用Ctrl+鼠标单击所选项目,在这种情况下,事件也将引发。因此,在调用代码之前,您需要检查iflistView1.SelectedIndices.Count>0您需要清楚地表明,在if内继续逻辑,因为t不会超出if的范围。您需要清楚地表明,在if内继续逻辑,因为t不会超出if的范围