Событие ListView SelectedIndexChanged нет проблем с выбранными элементами

У меня есть небольшое приложение C# 3.5 WinForms, над которым я работаю, которое захватывает имена журналов событий с сервера в listview. Когда один из этих элементов выбран, другой listview заполняется записями журнала событий из выбранного журнала событий с помощью события SelectedIndexChanged путем захвата свойства text 1-го элемента в коллекции SelectedItems, как показано ниже.

string logToGet = listView1.SelectedItems[0].Text;

это отлично работает в первый раз, но второй выбор имени журнала событий из первого ListView не удается. Происходит то, что коллекция SelectedItems, которую получает событие SelectedIndexChanged, пуста, поэтому я получаю исключение ArgumentOutOfRangeException.

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

3 ответов


да, причина в том, что при выборе другого элемента ListView отменяет выбор SelectedItem перед выбором нового элемента, поэтому счетчик будет идти от 1 до 0, а затем до 1 снова. Один из способов исправить это-проверить, что коллекция SelectedItems содержит элемент, прежде чем пытаться его использовать. То, как вы это делаете, прекрасно, вам просто нужно принять это во внимание

например

if (listView1.SelectedItems.Count == 1)
{
    string logToGet = listView1.SelectedItems[0].Text;
}

вы должны проверить, что коллекция SelectedItems имеет значения в нем, прежде чем пытаться получить значения из него.

что-то типа:

if(listView1.SelectedItems.Count > 0)
   //Do your stuff here

при выборе нового элемента предыдущий элемент сначала не выбирается. Оберните свой код в быструю проверку:

if( listView1.SelectedItems.Count > 0)
{
 string logToGet = listView1.SelectedItems[0].Text;
}

это будет игнорировать выбранные элементы, изменяющиеся на нет выбранного элемента.