2009-10-29 2 views
3

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

private void MoveSelItems(ListBox from, ListBox to) 
    { 
     for (int i = 0; i < from.SelectedItems.Count; i++) 
     { 
      to.Items.Add(from.SelectedItems[i].ToString()); 
     } 

     from.Items.Remove(to.SelectedItem); 
    } 

Я использую C#/Winforms/-Net 3,5

+0

Это потому, что «в» ListBox не автовыбора элементы, добавить к нему, таким образом, «от .Items.Remove (to.SelectedItem) "ничего не делает, поскольку" to.SelectedItem "это НЕ какой-либо из только что добавленных элементов –

ответ

3

Попробуйте этот код вместо в конце цикла

foreach (var item in new ArrayList(from.SelectedItems)) { 
    from.Items.Remove(item); 
} 
1
private void MoveSelItems(ListBox from, ListBox to) 
    { 
     for (int i = 0; i < from.SelectedItems.Count; i++) 
     { 
      to.Items.Add(from.SelectedItems[i].ToString()); 
      from.Items.Remove(from.SelectedItems[i]); 
     } 
    } 

Хотя

Items.RemoveAt (я), вероятно, быстрее, если это имеет значение.

Возможно, вам понадобится создать холдинг-лист.

//declare 
    List<Object> items = new List<Object>(); 
    for (int i = 0; i < from.SelectedItems.Count; i++) 
    { 
     items.Add(from.SelectedItems[i]); 
    } 
    for (int i = 0; i < items.Count; i++) 
    { 
     to.Items.Add(items[i].ToString()); 
     from.Items.Remove(items[i]); 
    } 
+0

Я не верю, что это сработает, потому что вы будете менять коллекцию во время итерации. Вы пропустите предметы. – JaredPar

+0

Хороший вопрос. Изменяет ли «Элементы» «SelectedItems»? Вероятно, да. В этом случае ему нужно будет прочитать их во временном массиве. Отредактировано для представления этого. –

+0

Это было то, что я думал, потому что массив становится меньше, поэтому я получу индексную ошибку – Kai

2
private void MoveSelItems(ListBox from, ListBox to) 
{ 
    while (from.SelectedItems.Count > 0) 
    { 
     to.Items.Add(from.SelectedItem[0]); 
     from.Items.Remove(from.SelectedItem[0]); 
    } 
} 
1
   for (int i = 0; i < ListBox3.Items.Count; i++) 
       { 
        ListBox4.Items.Add(ListBox3.Items[i].Text); 
        ListBox3.Items.Remove(ListBox3.SelectedItem); 

       } 
Смежные вопросы