Другое редактирование: работать с asp.net странно, если вы привыкли к winforms.
Последняя, фактически протестированная на этот раз версия ниже
using System.Collections.Generic;
var selectedIndices = lstCategory.GetSelectedIndices();
var killList = new List<ListItem>();
foreach (var selIndex in selectedIndices)
{
//add the item to remove to the kill list AND to the other listbox
killList.Add(lstCategory.Items[selIndex]);
lstSelCategory.Items.Add(lstCategory.Items[selIndex]);
}
foreach (var killMe in killList)
{
lstCategory.Items.Remove(killMe);
}
Редактировать: приведенный ниже код не будет работать. Я думал, что проблема была проблемой WinForms. В списке веб-управления отсутствуют свойства, используемые в приведенном ниже коде.
Опасно зацикливаться на выбранных элементах / индексах, пока вы удаляете элементы из коллекции.
Вот решение (с использованием LINQ), которое копирует список ссылок на выбранные элементы, а затем использует копию для перемещения элементов:
var selItems = lstCategory.SelectedItems.Cast<object>().ToList();
foreach (var selItem in selItems)
{
lstCategory.Items.Remove(selItem);
lstSelCategory.Items.Add(selItem);
}