2009-10-29 208 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

這是因爲「到」列表框不會自動選擇的項目添加到它,從而「從.Items.Remove(to.SelectedItem)「不做任何事情,因爲」to.SelectedItem「它不是任何剛添加的項目 – 2009-10-29 16:17:09

回答

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(i)是可能更快,如果該事項。

您可能需要創建一個保留列表。

//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 2009-10-29 15:29:51

+0

好問題。編輯「項目」是否改變「SelectedItems」?可能是。在這種情況下,他需要將它們讀入臨時數組中。編輯來表示這一點。 – 2009-10-29 15:31:45

+0

那是我在想因爲數組是beoming更小,所以我會得到一個索引錯誤 – Kai 2009-10-29 15:32:29

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); 

       } 
相關問題