2017-01-20 13 views
0

Я хочу найти список для значения объекта, которое я сделал. Это строка переопределения. Вот как элементы добавляются в список.C# Выбор нескольких результатов в поиске по списку?

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 объекта. Когда я поставил в Еогеаспе, чтобы сделать его выбрать несколько элементов, моя программа не удалась, и я получил следующее сообщение об ошибке:

The list that this enumerator is bound to has been modified. An enumerator can only be used if the list is not changed

Дополнительной информацию, как просил! Это где я добавить информацию в ListBox:

private void btnReserve_Click(object sender, EventArgs e) { Reservations 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.

+0

Не могли бы вы поделиться некоторыми больше кода или предоставить более полное сообщение об исключении? Из кода, который вы предоставили, ни comboBox, ни listBox не были удалены или добавлены элементы, что, по-видимому, является состоянием сообщения (изменение свойства «Selected» обычно не дает такого типа ошибок. – VilladsR

+0

Вы не можете изменять элементы, привязанные к foreach внутри итерации, так что это вызывает проблему, но ваше решение должно быть в порядке с циклом for, если вы отметили свой выборMode на несколько. –

+0

Добавлен больше кода для уточнения, спасибо за быстрые ответы! –

ответ

0

Я не понимаю, почему вам нужен Еогеасп мульти выберите в вашем случае, особенно, что вы не используя «элемент var» в любом месте кода.

Однако исключение может возникнуть, если реализация «SetSelected» внесла некоторые изменения внутри элементов.

  1. Убедитесь, что вы настроили свой список для множественного выбора

    // Установить режим выбора на несколько и расширен. listBox1.SelectionMode = SelectionMode.MultiExtended;

  2. Удалить препятствие. (Если вы по-прежнему нужен еще один цикл, заменить Еогеасп с «для»)

Проверьте ссылку ниже документации, которая имеет V хороший пример множественного выбора ListBox:. https://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.items(v=vs.110).aspx

+0

Спасибо за предложение i задайте режим выбора. Однако ошибка все еще возникает. плохо добавьте снимок экрана в сообщение об ошибке. Также, что я должен разместить в цикле for? –

+0

Вы должны удалить цикл foreach или заменить его на обычный цикл. –

 Смежные вопросы

  • Нет связанных вопросов^_^