【问题标题】:C# two listboxes and two listsC# 两个列表框和两个列表
【发布时间】:2015-12-10 21:50:53
【问题描述】:

我正在尝试让两个列表框相互配合。 我正在使用 Listbox1、Listbox2、List1 和 List2(在本示例中),这两个列表用于进一步的目的,因此需要包含它们。

Listbox2 应该包含 List2 的所有内容,listbox1 应该包含 List1 的所有内容,但 List2 中的项目除外。 我一直在尝试很多不同的方法,但我似乎无法通过。 目前 Listbox2 已完美填充和更新,但我似乎无法让 Listbox1 相应地工作。

我尝试过的选项(可能写错了): - 将 List1 的所有内容添加到 Listbox1,然后删除 List2 包含的所有内容 - 遍历每个 List1 项目并检查它是否存在于 List2 中。仅在未添加时添加。

提前致谢!

我知道我在这里添加双打。在尝试新事物时,我尝试了很多东西并删除了所有东西(不要问为什么,坏习惯)

(AddToListbox 是一种工作方法。)

if (classroom.members.Count <= 0)
        {
            foreach (Student student in repository.students)
            {
                AddtoListbox(Listbox1, student);
            }
        }
        else
        {
            foreach (Student student in repository.students)
            {
                foreach (Student studentInClass in classroom.members)
                {
                    if (student.LastName != studentInClass.LastName || student.FirstName != studentInClass.FirstName)
                    {
                        AddtoListbox(Listbox1, student);
                    }
                }
            }
        }

【问题讨论】:

  • 可以肯定的是,Listbox2 可以显示列表 2 中已经在列表 1 中的内容,对吧?
  • List1 是例如 10 名学生(所有学生)的集合。 List2 是某个班级的学生的集合,例如 6/10 学生(只有在校学生),这意味着 List2 是 List1 的一部分。 Listbox1 应该显示 List1 减去 List2。在这个小例子中,List1 应该显示 4 个学生,而 List2 显示其他 6 个学生
  • 你能发布你目前拥有的东西吗?我最初的想法是首先填充 Listbox2。然后在填充 Listbox1 时使用 Foreach 并遍历 List2 中的每个项目以确保没有重复项。
  • @Kevin 假设你有 LINQ。见这里:stackoverflow.com/questions/683310/…
  • @Kevin 分享您的代码,我们可以找出您哪里出错了。

标签: c# list listbox


【解决方案1】:

我做了一个小样本等待你的代码。我有一个填充两个List&lt;int&gt; 的按钮。第一个列表是 1-20,而第二个是 5-9。您会看到它用 5-9 填充 Listbox1,用 1-4 和 10-20 填充 Listbox2

private void button1_Click(object sender, EventArgs e)
{
     list1 = new List<int>(Enumerable.Range(5,5));
     list2 = new List<int>(Enumerable.Range(1,20));

     foreach (int num1 in list1)
     {
         listBox1.Items.Add(num1);
     }

     foreach (int num2 in list2)
     {
         bool numFound = false;
         foreach (int num1 in list1)
         {
             if (num2 == num1)
             {
                 numFound = true;
                 break;
             }
         }
         if (!numFound)
             listBox2.Items.Add(num2);
     }
}

不是最有说服力的代码,但它可以完成工作。

【讨论】:

    【解决方案2】:

    在 List1 上尝试Except

    listbox1.AddRange(List1.Except(List2).Cast<object>.ToArray());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多