Программа вылетает при попытке изменить выбранный элемент из списка - PullRequest
0 голосов
/ 16 апреля 2020

Итак, у меня есть просмотр списка и некоторые элементы в нем. Я сохраняю ссылку на выбранный элемент в переменной, но если я изменю свой выбранный элемент, то программа вылетает.

   private void listView1_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            var prod = (Produs)lvProduse.SelectedItems[0].Tag;
            tb1.Text = prod.Denumire;
            tb2.Text = prod.Pret.ToString();
            tb3.Text = prod.Cantitate.ToString();

        }

Я думаю, здесь моя проблема (Produs) lvProduse.SelectedItems [0 ] .tag; . С первым выбранным элементом программа работает нормально, но если я пытаюсь изменить свой выбор, я получаю ошибку System.ArgumentOutOfRangeException.

1 Ответ

3 голосов
/ 16 апреля 2020

У вас есть необработанное исключение в обработчике событий.

Обычно необработанное исключение приводит к сбою отладчика и сообщению о том, что не так. Но в событии ListView.SelectedIndexChanged есть ошибка, из-за которой ваша программа просто сразу обработает sh.

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

Сначала вы получаете событие, которое уведомляет вас о том, что НЕТ элемента выбрано

Затем вы получаете событие, которое уведомляет вас о том, что новый элемент выбран.

В первом событии Если выбран элемент НЕТ, список lvProduse.SelectedItems будет пустым. Поэтому при доступе к элементу 0 будет выброшено.

Необходимо проверить, выбран ли элемент вообще, отметив lvProduse.SelectedItems.Any() (или, возможно, lvProduse.SelectedItems.Count != 0, сейчас я не уверен, поддерживает ли этот список LINQ) например.

...