Чтобы переместить все элементы, попробуйте пойти в обратном порядке:
for (int i = listBox1.Items.Count - 1; i >= 0; i--) {
listBox2.Items.Add(listBox1.Items[i]);
listBox1.Items.RemoveAt(i);
}
Более практичным способом перемещения всех «выбранных» элементов будет первый цикл по всем выбранным элементам идобавьте их во второй список:
for (int i = 0; i < listBox1.SelectedItems.Count; i++) {
listBox2.Items.Add(listBox1.SelectedItems[i]);
}
И затем, чтобы удалить эти элементы из listBox1, проще перейти в обратном порядке:
for (int i = listBox1.SelectedIndices.Count - 1; i >= 0; i--) {
listBox1.Items.RemoveAt(listBox1.SelectedIndices[i]);
}
Причина обратного порядкапростота.Если вы удалите элементы в прямом порядке, индекс «следующий» будет отключен на единицу, и вам придется вручную отслеживать ваши индексы.Следовательно, обратный порядок позволяет избежать этой проблемы.