Member 12950663 Ответов: 3

C# listview не позволяет мне удалить выбранный элемент


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

исключение говорят: индекс был вне диапазона.Должно быть неотрицательным и меньше размера коллекции. Имя параметра: индекс

private void Remove( )
        {
            
            try
            {
                
                      listView1.Items.RemoveAt(listView1.SelectedItems[0].Index);


            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }


Что я уже пробовал:

несмотря на то , что я попытался ввести прямой индекс 0, он все равно выдаст то же исключение

ListView.SelectedListViewItemCollection album = this.listView1.SelectedItems;
                if (album.Count > 0)
                    listView1.Items.RemoveAt(0);

3 Ответов

Рейтинг:
2

#realJSOP

Вы осматривали SelectedItems коллекция, чтобы убедиться, что это не Эмпи?


Рейтинг:
2

Wendelius

Взятый это Windows Forms....

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

Если второй пример терпит неудачу с тем же самым точным исключением, то, возможно, проблема вызвана расположением вашего кода. Если вы выполняете код слишком рано, элемент управления может еще не быть создан. Вы можете исследовать ситуацию из Контроль.IsHandleCreated Property (System.Окна.Формы)[^]

Например, если вы вызовете следующий код из конструктора формы, то получите сообщение о том, что listview еще не создан. Кроме того, если вы опустите сообщение и позволите коду работать, вы увидите, что в listview есть три элемента, поэтому удаление не произошло.

Если вы вызываете его, например, из события нажатия кнопки, он должен работать нормально

public void RemoveItems(bool omitCheck=false) {

   if (!omitCheck) {
      if (!this.listView1.IsHandleCreated) {
         MessageBox.Show("Listview not fully created yet");
         return;
      }
   }

   this.listView1.MultiSelect = true;

   // Add a few items
   this.listView1.Items.Add("First");
   this.listView1.Items.Add("Second");
   this.listView1.Items.Add("Third");

   // Delete selected items (none)
   foreach (ListViewItem item in this.listView1.SelectedItems) {
      this.listView1.Items.Remove(item);
   }

   // Select two items
   this.listView1.Items[0].Selected = true;
   this.listView1.Items[2].Selected = true;

   // Delete selected items (two)
   foreach (ListViewItem item in this.listView1.SelectedItems) {
      this.listView1.Items.Remove(item);
   }
}


Рейтинг:
0

Member 12950663

да, я сделал это, исключение было брошено на **


if (listView1.SelectedItems.Count > 0)
                {
                    listView1.Items.RemoveAt(listView1.SelectedItems[0].Index); **
                    
                    
                }


Wendelius

При публикации комментариев к решениям не публикуйте новые решения. Вместо этого нажмите " есть вопрос или комментарий?" кнопка.