2012-02-06 58 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