ListView SelectedIndexChanged Событие no Selected Items проблема - PullRequest
6 голосов
/ 27 августа 2010

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

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

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

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

Ответы [ 4 ]

13 голосов
/ 27 августа 2010

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

например

if (listView1.SelectedItems.Count == 1)
{
    string logToGet = listView1.SelectedItems[0].Text;
}
1 голос
/ 27 августа 2010

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

Что-то вроде:

if(listView1.SelectedItems.Count > 0)
   //Do your stuff here
0 голосов
/ 02 января 2019

У меня была эта проблема, и, потратив слишком много времени, я понял, что проблема заключается в попытке получить listView1.SelectedItems из другого потока.Это может быть полезно для других.

0 голосов
/ 27 августа 2010

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

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

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

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