2017-01-20 6 views
0

Ich möchte ein Listenfeld nach einem Objektwert suchen, den ich gemacht habe. Dies ist die Überschreibungszeichenfolge. So werden Elemente in das Listenfeld eingefügt.C# Auswählen mehrerer Ergebnisse in einer Listbox-Suche?

Ich möchte jetzt in meiner Listbox nach Ergebnissen suchen, während ich nach einer bestimmten roomNumber suche. Alle roomNumbers werden in einer Combobox gespeichert. Dies ist, was ich habe zur Zeit:

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

Dies wählt nur ein Ergebnis, obwohl und es ist nicht nur auf die Zimmernummer Objekt angegeben. Wenn ich in der foreach setzen, um es mehrere Artikel auszuwählen, mein Programm nicht und ich habe den folgenden Fehler:

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

Zusätzliche Informationen wie gefragt! Diese ist, wo ich die Informationen in das Listenfeld hinzufügen:

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

Der Fehler: the error when it pops up. The dutch additional information is the initial error message.

+0

Könnten Sie einige teilen mehr Code oder eine vollständigere Ausnahmebedingungsnachricht bereitstellen? Von dem von Ihnen bereitgestellten Code haben weder die comboBox noch die listBox Elemente entfernt oder adde, was zu dem zu sein scheint, was die Nachricht angibt (Änderung der Eigenschaft "Selected" führt normalerweise nicht zu diesem Fehlertyp.) – VilladsR

+0

Sie können die gebundenen Elemente nicht ändern foreach innerhalb der Iteration, also ist das, was das Problem verursacht, aber Ihre Lösung sollte in Ordnung sein mit der for-Schleife, wenn Sie Ihren selectionMode auf mehrere –

+0

Mehr Code zur Klärung, danke für die schnelle Antworten! –

Antwort

0

Ich sehe nicht, warum Sie eine foreach brauchen vor allem in Ihrem Fall wählen Multi, dass Sie Verwenden Sie nicht das "var-Element" irgendwo im Code.

Die Ausnahme kann jedoch auftreten, wenn die Implementierung "SetSelected" intern einige Änderungen an den Elementen vornimmt.

  1. Stellen Sie sicher, Ihre Liste für Multi-Select

    // den Auswahl-Modus auf mehr und erweitert konfiguriert haben. listBox1.SelectionMode = SelectionMode.MultiExtended;

  2. Die foreach entfernen. (Wenn Sie noch eine weitere Schleife benötigen, ersetzen Sie die foreach mit einer „for“)

Überprüfen Sie die unten Dokumentation Link, v hat gutes Beispiel für Multi-Select-List-Box:. https://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.items(v=vs.110).aspx

+0

Vielen Dank für den Vorschlag, ich Stellen Sie den Auswahlmodus ein. Der Fehler tritt jedoch immer noch auf. Fügen Sie der Fehlermeldung einen Screenshot hinzu. Was soll ich in die for-Schleife setzen? –

+0

Sie müssen die foreach-Schleife alle zusammen entfernen oder durch eine normale for-Schleife ersetzen. –

Verwandte Themen