Я сделал это с помощью следующего кода, но есть исключение, когда выбрано более одного элемента:
Индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции.
Имя параметра: индекс
List<ListViewItem> ListViewItems = new List<ListViewItem>();
foreach (int index in listView1.SelectedIndices)
{
ListViewItem SelectedListViewItem = listView1.Items[index]; // exception
ListViewItems.RemoveAt(index);
}
…
void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
e.Item = ListViewItems[e.ItemIndex];
}
Всякий раз, когда вы удаляете элемент (ы) из коллекции, всегда выполняйте итерации от самого большого индекса к наименьшему индексу, например:
for (int index = listView1.SelectedIndices.Count - 1; i >= 0; i--)
{
…
}
Это потому, что каждый раз, когда вы удаляете элемент в коллекции, индекс будет меняться, если вы не выполняете итерацию от самого большого до самого маленького индекса.