Проблемы с выбранными индексами в listview

#c# #listview

#c# #winforms #listview #arraylist

Вопрос:

У меня есть arraylist, который содержит объекты моего собственного класса. Я хочу извлечь объект из списка массивов, который имеет индекс = selectedindex из listview.

Я пробовал это :

 TrackInformation t=(TrackInformation) SongList[listView1.SelectedIndices[0]];
  

TrackInformation это мой класс и SongList это ArrayList типа TrackInformation .

listview1 не разрешает выбор нескольких индексов, поэтому мне нужен первый элемент SelectedIndices коллекции.

Я получаю ArgumentOutOfRangeException , и он говорит, что значение ‘0’ недопустимо для ‘index’.

Комментарии:

1. Вы уверены, что какой-либо элемент выбран в вашем пользовательском интерфейсе? Исключение говорит само за себя, что ни один элемент не выбран в пользовательском интерфейсе. В этом случае только индекс может быть вне диапазона.

2. код написан на listview1_SelectedIndexChanged , так что да, элемент определенно выбран.

3. При отмене выбора элемента из пользовательского интерфейса в этом случае также возникло событие изменения выбора. Попробуйте использовать Ctrl Mouse Click для выбранного элемента, в этом случае также будет вызвано событие. Итак, перед вызовом вашего кода вам необходимо проверить if(listView1.SelectedIndices.Count>0)

Ответ №1:

Поместите эту строку перед своим кодом —

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

Комментарии:

1. Вам нужно четко указать, чтобы продолжить логику внутри if , поскольку t это не выйдет за рамки if

Ответ №2:

Просмотр списка.Событие SelectedIndexChanged имеет особенность, которая подрывает ваш код. При запуске вашей программы ни один элемент не выбран. Щелкните элемент и SelectedIndexChanged срабатывает, проблем нет. Теперь щелкните другой элемент, и событие сработает дважды. Сначала, чтобы вы знали, бесполезно, что первый элемент невыбран. Затем еще раз, чтобы сообщить вам, что выбран новый элемент. Это первое событие заставит вас проиндексировать пустой массив, бабах. Фрагмент RV1987 предотвращает это.

Ответ №3:

Ошибка связана с тем, что ListView1.SelectedIndices пуст, у вас выбрана строка?

вероятно, вы хотите включить тест

 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
}