ListBox传输内容并移除
本文关键字:传输 ListBox | 更新日期: 2023-09-27 18:22:38
我正在做硬件作业(一如既往,不要间接地让我成为骗子,帮助我学习!),我在列表框方面遇到了很多麻烦。
我目前可以移动/删除单个项目(水果选择编辑=>myFruits)
然而,我需要能够一次移动所有项目,(删除它们很容易)。
谷歌并没有起到很大的作用,似乎很多答案对初学者来说太复杂了,或者它们被可怕地弃用了。
所以问题是:如何将一个列表框中的内容转移到另一个?(Listbox1名称:水果。Listbox2名称:myFruits)
您可以使用以下策略:
- 将所选水果(
fruits.SelectedItems
)复制到新列表中 - 循环浏览此列表,对于每种水果:
- 将其从水果列表框中删除。(
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();
}
}