Ошибка при выборе второго элемента из ListView C # - PullRequest
0 голосов
/ 09 октября 2019

У меня есть представление списка со свойством multiselect, установленным в false. Когда пользователь щелкает по нему, я беру свойство NAME элемента представления списка и преобразую его в десятичное число, а затем передаю его методу, который загружает правильную запись.

Приведенный ниже код отлично работает, когда я выбираю один элемент, независимо от того, сколько элементов в списке и независимо от того, какой элемент я выбрал.

        private void ListInstruments_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListViewItem selection = listInstruments.SelectedItems[0];
            if (selection != null)
            {
                 string strSelection = selection.Name;
                 SelectedInstrumentID = Convert.ToDecimal(strSelection);
                 LoadSelectedInstrument();                
            }
        }

Когда я делаю второй выбор (не множественный выбор, а другой выбор из списка), я получаю ошибку, ссылающуюся на listInstruments.SelectedItems[0].

System.ArgumentOutOfRangeExceptionСообщение = InvalidArgument = Значение «0» недопустимо для «индекса». Имя параметра: index Source = System.Windows.Forms

Любая помощь приветствуется.

1 Ответ

1 голос
/ 09 октября 2019

Возможно, что не выбрано ни одного элемента , поэтому list.SelectedItems равно пусто ;вы пытаетесь получить 0 -й элемент из пустой коллекции и, таким образом, выдается исключение . Быстрый патч -

 // instead of original
 // ListViewItem selection = listInstruments.SelectedItems[0];
 ListViewItem selection = list.SelectedItems.Count > 0 
   ? listInstruments.SelectedItems[0] // the collection has at least one item
   : null;                            // if the collection is empty

Или мы можем проверить, есть ли у нас выбор, и return, когда его нет

 private void ListInstruments_SelectedIndexChanged(object sender, EventArgs e)
 {
    if (list.SelectedItems.Count <= 0)   
        return; 

    listViewItem selection = listInstruments.SelectedItems[0];

    string strSelection = selection.Name;
    SelectedInstrumentID = Convert.ToDecimal(strSelection);
    LoadSelectedInstrument();  
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...