ListBox传输内容并移除

本文关键字:传输 ListBox | 更新日期: 2023-09-27 18:22:38

我正在做硬件作业(一如既往,不要间接地让我成为骗子,帮助我学习!),我在列表框方面遇到了很多麻烦。

我目前可以移动/删除单个项目(水果选择编辑=>myFruits)

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

谷歌并没有起到很大的作用,似乎很多答案对初学者来说太复杂了,或者它们被可怕地弃用了。

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

ListBox传输内容并移除

您可以使用以下策略:

  1. 将所选水果(fruits.SelectedItems)复制到新列表中
  2. 循环浏览此列表,对于每种水果:
    • 将其从水果列表框中删除。(fruits.Items.Remove
    • 将其添加到myFruits列表框中。(fruits.Items.Add

要移动所有项目,请尝试按相反顺序进行:

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

颠倒顺序的原因是简单。如果按正向顺序删除项目,则"下一个"索引将减少一个,并且您必须手动跟踪索引。因此,按照相反的顺序进行可以避免这个问题。

我在一个类似的项目中使用了一些属性。。。希望这能有所帮助,因为它不会给你完整的答案,而是根据你的家庭作业和两份水果清单给你一个起点。

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