ListBox传输内容和删除

时间:2012-02-06 19:53:44

标签: c# winforms listbox

我正在做一个硬件任务(一如既往,不要间接让我成为骗子,帮助我学习!)而且我在列表框上遇到了很多麻烦。

我目前能够移动/删除单个项目(水果selecteditem => myFruits)

但是我需要能够一次移动所有项目(删除它们很容易)。

谷歌没有太大的帮助,似乎很多答案对于初学者C#来说太复杂了,或者他们被贬低了。

所以问题是:如何将一个列表框的内容转移到另一个列表框中? (Listbox1名称:fruits。列表框2名称:myFruits)

3 个答案:

答案 0 :(得分:2)

您可以使用以下策略:

  1. 将选定的水果(fruits.SelectedItems)复制到新列表中
  2. 循环浏览此列表,并为每个水果:
    • 从水果ListBox中删除它。 (fruits.Items.Remove
    • 将其添加到myFruits ListBox。 (fruits.Items.Add

答案 1 :(得分: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]);
}

相反顺序的原因是简单。如果以正向顺序删除项目,则“下一个”索引将逐一删除,您必须手动跟踪索引。因此,以相反的顺序进行避免了这个问题。

答案 2 :(得分:1)

我有一些属性,我刚才在一个类似的项目中使用过...希望这有帮助,因为它没有给你完整的答案,但根据你的家庭作业和两个水果列表给你一个起点。 / p>

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