【问题标题】:ListBox Transfer Contents and RemoveListBox 传输内容并删除
【发布时间】:2012-02-07 04:21:11
【问题描述】:

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

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

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

Google 并没有提供多少帮助,似乎很多答案对于初学者 C# 来说太复杂了,或者它们已被严重弃用。

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

【问题讨论】:

  • 什么样的列表框? Windows 窗体?网络表格?银光?
  • 抱歉,这是一个 Windows 窗体。不过,第一个答案立即帮助了我,很抱歉迟到了。

标签: c# winforms listbox


【解决方案1】:

您可以使用以下策略:

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

【讨论】:

    【解决方案2】:

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

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

    相反顺序的原因是简单。如果您按顺序删除项目,“下一个”索引将关闭一个,您将不得不手动跟踪您的索引。因此,以相反的顺序进行可以避免这个问题。

    【讨论】:

    • 嗯,我很欣赏这个答案,但你并没有完全帮助我学习。 listbox2.items.removeat(i) 应该是 listbox1 顺便说一句。现在可以了,谢谢!
    • @PRPGFerret 添加了更多示例和一些解释。第一个示例虽然有效,但也会以相反的顺序将项目放入 listBox2 中,在这种情况下,您将遍历列表框一次以添加,然后在完成后清除列表。希望对您有所帮助。
    【解决方案3】:

    我有一些我不久前在类似项目中使用过的属性...希望这会有所帮助,因为它不会给你完整的答案,但会根据你的作业和两个水果列表为你提供一个起点。

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

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多