2012-02-06 60 views
0

我做了HW分配(一如既往,不間接地讓我一個騙子,幫助我學習!),我有麻煩與列表框了很多。列表框傳送內容和刪除

我現在有它能夠移動/刪除單品(如水果將selectedItem => myFruits)

不過,我需要能夠一次移動的所有項目,(刪除它們很容易)。

谷歌還沒有完全的幫助下,似乎很多答案也一路初學C#太複雜或他們可怕的棄用。

所以,問題是:如何將我一個列表框的內容傳輸到另一個? (ListBox1的名稱:水果Listbox2名稱:myFruits)

+0

什麼樣的列表框中的? Windows窗體? Web窗體? SilverLight的? – 2012-02-06 20:03:53

+0

對不起,這是一個Windows窗體。儘管第一個答案立即幫助了我,但對遲到感到抱歉。 – 2012-02-06 20:08:58

回答

1

要移動的所有項目,嘗試以相反的順序去:

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

的原因相反的順序是簡單。如果您按照前向順序移除項目,則「下一個」索引將被關閉,您將不得不手動跟蹤索引。因此,逆向排序避免了這個問題。

+0

嗯,我很欣賞答案,但你並沒有完全幫助我學習。 listbox2.items.removeat(i)應該是listbox1順便說一句。它現在有用,謝謝! – 2012-02-06 20:03:53

+0

@PRPGFerret添加了更多示例和一些解釋。第一個例子雖然有效,但也會按照相反順序將項目放入listBox2中,在這種情況下,您只需循環一次列表框即可添加,然後只需在完成時清除列表。希望有所幫助。 – LarsTech 2012-02-06 20:25:05

1

我有一些屬性,我用了一段時間以前,在一個類似的項目......希望這可以幫助,因爲它不會給你完整的答案,但讓你根據你的功課與水果的兩個列表的起點。

public List<string> NotAddedAssets 
    { 
     get 
     { 
      List<string> notAddedAssets = new List<string>(); 

      for (int i = 0; i < lbNotAddingAssets.Items.Count; i++) 
       notAddedAssets.Add(lbNotAddingAssets.Items[i].ToString()); 

      notAddedAssets.Sort(); 

      return notAddedAssets; 
     } 
     set 
     { 
      lbNotAddingAssets.AppendDataBoundItems = true; 
      lbNotAddingAssets.Items.Clear(); 
      value.Sort(); 
      lbNotAddingAssets.DataSource = value; 
      lbNotAddingAssets.DataBind(); 
     } 
    } 

    public List<string> AddedAssets 
    { 
     get 
     { 
      List<string> addedAssets = new List<string>(); 

      for (int i = 0; i < lbAddingAssets.Items.Count; i++) 
       addedAssets.Add(lbAddingAssets.Items[i].ToString()); 

      addedAssets.Sort(); 

      return addedAssets; 
     } 
     set 
     { 
      lbAddingAssets.AppendDataBoundItems = true; 
      lbAddingAssets.Items.Clear(); 
      value.Sort(); 
      lbAddingAssets.DataSource = value; 
      lbAddingAssets.DataBind(); 
     } 
    } 
2

您可以使用以下策略:在一個新的列表

  • 遍歷這個列表

    1. 複製所選水果(fruits.SelectedItems),併爲每個水果:
      • 從中刪除水果ListBox。 (fruits.Items.Remove
      • 將它添加到列表框myFruits。 (fruits.Items.Add