2016-05-06 3 views
0

У меня есть список, состоящий из 7 столбцов. Я хочу добавить информацию о каждом столбце, но когда он достигнет подпункта 2 из спискаView, я получаю System.ArgumentOutOfRangeException, хотя у меня есть этот подпункт.listview- System.ArgumentOutOfRangeException

Любая идея, почему я получаю эту ошибку? Я попытался найти его, но я не нашел подобного случая. Это часть кода, где я получаю эту ошибку:

if (seen == true) 
      listView1.SelectedItems[0].SubItems[2].Tag = "Seen"; 
     else 
      listView1.SelectedItems[0].SubItems[2].Tag = "Not Seen"; 

ответ

1

Вы, вероятно, не имеют все эти подпункты в каждый пункт.

Или, может быть, ничего не выбрано? (Обратите внимание, что SelectionChanged события вызывается, когда Item является невыбранными, как хорошо!)

Обратите внимание, что каждый Item в ListView может иметь свой собственный номер из подпункты, независимо от того, сколько Columns вы создали , Они предоставляют только дисплей данных, а не слоты, к которым вы можете получить доступ, не создавая SubItems!

Поэтому мы должны проверить его, прежде чем мы его получим! Другими словами: структура ListView - это не 2d-массив, а массив с зазубринами!

Это может быть возможной проверкой ..:

if (listView1.SelectedItems[0].Count > 0 &&  
    listView1.SelectedItems[0].SubItems.Count > 2) 
    listView1.SelectedItems[0].SubItems[2].Tag = seen ? "Seen" : "Not Seen"; 

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

Только не надейтесь на число SubItems, равное числу Columns. Они не связаны вообще, и либо может быть больше в каждом Item!

+0

Хорошо, теперь я понимаю, но что мне нужно изменить, чтобы иметь доступ к этим подэлементам? Beacause Цель состоит в том, чтобы заполнить каждое из этих полей данными. Спасибо! –

+0

Они должны __exist__, поэтому вам нужно __create/add__ каждый. Но, может быть, ошибка была в 'SelectedItems [0]'? Используйте отладчик, чтобы выяснить, какой из двух указателей вызывает исключение! – TaW

Смежные вопросы