【问题标题】:C# Selecting multiple results in a listbox search?C#在列表框搜索中选择多个结果?
【发布时间】:2017-01-20 19:49:56
【问题描述】:

我想在列表框中搜索我创建的对象值。这是覆盖字符串。这就是将项目添加到列表框中的方式。

 public override string ToString()
    {
        string reservatiestring;
        reservatiestring ="Kamer: " + roomNumber + "  Op datum: " + datum + "  Aantal personen: " + personen.Count + "  Naam: " + reservatienaam;
        return reservatiestring;
    }

我现在想在搜索特定房间号时在我的列表框中搜索结果。所有房间号都保存在一个组合框中。这是我目前拥有的:

private void buttonSearch_Click(object sender, EventArgs e)
    {
        foreach (var item in listBox1.Items)
        {
        for (int i = listBox1.Items.Count - 1; i >= 0; i--)
        {
            if (listBox1.Items[i].ToString().ToLower().Contains(comboBox1.SelectedText.ToLower()))
            {
                listBox1.SetSelected(i, true);
            }
            else
            {
                MessageBox.Show("error");
            }
        }

这只会选择一个结果,并且它没有指定给 roomNumber 对象。当我放入 foreach 使其选择多个项目时,我的程序失败并且出现以下错误:

此枚举器绑定的列表已被修改。只有在列表没有改变的情况下才能使用枚举器

根据要求提供额外信息! 这是我将信息添加到列表框的地方:

private void btnReserve_Click(object sender, EventArgs e) { 预订reservatie = new Reservations();

        reservatie.roomNumber = Convert.ToInt32(numericUpDownroom.Value);
        reservatie.datum = dateTimePicker1.Value;
        reservatie.reservatienaam = textBoxName1.Text;



        for (int i = 0; i <= personcount; i++)
        {
            Person persoon = new Person();
            persoon.naam = textBoxName1.Text;
            persoon.leeftijd = Convert.ToInt32(numericUpDownAge1.Value);
            reservatie.personen.Add(persoon);

        }
        if (!comboBox1.Items.Contains(reservatie.roomNumber))
        {
            comboBox1.Items.Add(reservatie.roomNumber);
        }
        else
            reservaties.Add(reservatie);
        listBox1.FormattingEnabled = false;
        listBox1.Items.Add(reservatie.ToString());

错误:the error when it pops up. The dutch additional information is the initial error message.

【问题讨论】:

  • 您能分享更多代码或提供更完整的异常消息吗?从您提供的代码中,组合框或列表框都没有删除或添加项目,这似乎是消息状态(更改“已选择”属性通常不会产生此类错误。
  • 您无法在迭代中修改绑定到 foreach 的项目,这就是导致问题的原因,但如果您已将 selectionMode 标记为多个,则使用 for 循环的解决方案应该没问题
  • 添加了更多代码以澄清,感谢您的快速回复!

标签: c# search listbox


【解决方案1】:

我不明白为什么在你的情况下你需要一个 foreach 来进行多选,尤其是你没有在代码中的任何地方使用“var item”。

但是,如果“SetSelected”实现在内部对项目进行一些更改,则可能会发生异常。

  1. 确保您已将列表配置为多选

    // 将选择模式设置为多重和扩展。 listBox1.SelectionMode = SelectionMode.MultiExtended;

  2. 删除 foreach。 (如果您还需要另一个循环,请将 foreach 替换为“for”)

查看下面的文档链接,其中包含多选 ListBox 的好示例: https://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.items(v=vs.110).aspx

【讨论】:

  • 感谢您的建议,我设置了选择模式。然而,错误仍然出现。生病在错误消息中添加屏幕截图。另外我应该在 for 循环中放置什么?
  • 您必须一起删除 foreach 循环或用常规 for 循环替换它。
猜你喜欢
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 2021-06-08
相关资源
最近更新 更多