Событие 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;
}
это будет игнорировать выбранные элементы, изменяющиеся на нет выбранного элемента.