2017-12-07 1 views
0

Ich erstelle ein System, das eine ListBox von Ganzzahlen von den Benutzer eingefügt enthält. Ich habe einen Suchknopf und eine Suche TextBox für den Benutzer enthalten, um die Ganzzahl einzugeben, nach der sie innerhalb der ListBox suchen möchten. Sobald der Benutzer die Ganzzahl eingegeben hat, möchte ich, dass eine Nachrichtenbox angezeigt wird, die den Benutzer entweder darüber informiert, dass z. 1 Integer des Werts '3' in der Listbox oder eine Fehlermeldung, die den Benutzer darüber informiert, dass die Integer-Zahl nicht in der Listbox vorhanden ist.Suche nach einem Element in einer ListBox mit einem Textfeld und einer Schaltfläche

private void buttonSearch_Click(object sender, EventArgs e) 
{ 
    listBoxAddedIntegers.SelectedItems.Clear(); 
    for (int i = listBoxAddedIntegers.Items.Count - 1;i>=0; i--) ; 
    { 
     if (listBoxAddedIntegers.Items[i].ToString().ToLower().Contains(textBoxSearch.Text.ToLower())) ; 
     { 
      listBoxAddedIntegers.SetSelected(i, true); 
     } 
    } 

    // ... 
} 

Ich bin nicht wirklich sicher auf dem Code, den ich gemeint bin hier aufzunehmen, und der Code, den ich bereits eingefügt habe darauf hin, dass ‚i‘ nicht in dem aktuellen Inhalt vorhanden ist.

Kann mir bitte jemand helfen?

+2

entfernen Sie die; nach der for-Zeile '' 'für (int i = listBoxAddedIntegers.Items.Count - 1; i> = 0; i--); '' 'es ist böse und stellt auch den Körper der for-Schleife dar, so dass der Block danach nicht erkannt wird, wie Sie es wollen. so ist es kein Wunder, dass ich weder – FrankM

Antwort

0
private void buttonSearch_Click(object sender, EventArgs e) 
    { 
     listBoxAddedIntegers.SelectedItems.Clear(); 

     var itemsFound = listBoxAddedIntegers.Items.Where(i=>i.ToString().ToLower().Contains(textBoxSearch.Text.ToLower())).ToList(); 

     if(itemsFound == null) 
     { 
      MessageBox.Show("No matches found."); 
     } 
     else 
     { 
      MessageBox.Show("Found " + itemsFound.Count + " matches."); 
     } 

    } 
0

Sie haben, dies zu tun,

int count=0; 

    for(int i=0;i<listBoxAddedIntegers.Items.Count;i++) 
    {  if(listBoxAddedIntegers.Items[i].Items[i].ToString().ToLower().Contains(textBoxSearch.Text.ToLower()) 
    { 
     count+=1;  
    } 
    } 

    if(count>0) 
{ 
    //display your message here after the loop with the count 
} 
else 
{ 
    //display your message with error 
} 

Bitte markieren Sie diese Antwort als hilfreich, wenn es Ihnen geholfen.

+0

Vielen Dank. Diese Antwort war sehr nützlich für mich. In der ersten Nachrichtenbox nach der Zählung kann ich jedoch nur den tatsächlichen Text anzeigen, der in das Suchtextfeld eingegeben wurde, wenn in der Liste etwa "Es gibt 1 Element 'Juli' angezeigt werden soll . " –

+0

Sie können die Nachricht anpassen, indem Sie etwa Folgendes tun: "There is" + count + "item" "+ (welcher Name auch immer angezeigt werden soll) +" 'in der ListBox ". Markieren Sie diese Antwort als richtig, wenn die Antwort Ihnen geholfen hat und sie aufgewertet hat! –

0

der Code, den ich bereits eingefügt haben lässt vermuten, dass 'i' existiert nicht in dem aktuellen Inhalt

Wie @FrankM bereits in den Kommentaren erwähnt. Sie haben eine nach ; nach Ihrem for -loop.

for (int i = listBoxAddedIntegers.Items.Count - 1;i>=0; i--) ; 

wird verhindert, dass diese die for -loop Code innerhalb des { ... } auszuführen. Dies kann

for (int i = listBoxAddedIntegers.Items.Count - 1;i>=0; i--) 
{ 
    // Do nothing. 
} 
{ 
    // now your code 
} 

Dies bedeutet auch, zu

transkribiert wird, dass der Code innerhalb der letzten geschweiften Klammern in seinem eigenen Rahmen sein wird und so, dass alle definierten Variablen wie den folgenden Code nicht verfügbar sein werden.


Beantwortung Ihre eigentliche Frage:

Wie Sie zur Auswahl der passenden Elemente bereits tun. Sie können diese Schleife erweitern, indem Sie einen Zähler hochzählen. Und später zeigen die Ergebnisse mit einer MessageBox.

Mit dem folgenden Ausschnitt des Codes

listBoxAddedIntegers.Items[i].ToString().ToLower().Contains(textBoxSearch.Text.ToLower())) 

Sie prüft derzeit, ob ein Element der Liste enthält die eingegebenen TextBox.Text.
Also, wenn der Benutzer eingegeben hat 3, 4, 5, ..., 13, 23 in der ListBox und sucht nach . Er bekommt 3 Spiele. Wenn Sie nur 1 Übereinstimmung möchten, sollten Sie String.Equals() verwenden. Ich habe StringComparison.InvariantCultureIgnoreCase verwendet, um zu vermeiden, ToLower() zu rufen.

private void buttonSearch_Click(object sender, EventArgs e) 
{ 
    var counter = 0; 

    for (int i = 0; i < this.listBoxAddedIntegers.Items.Count; i++) 
    { 
     var item = this.listBoxAddedIntegers.Items[i]; 
     if (string.Equals(item.ToString(), this.textBoxSearch.Text, StringComparison.InvariantCultureIgnoreCase)) 
     { 
      this.listBoxAddedIntegers.SelectedItems.Add(item); 
      counter++; 
     } 
    } 

    if (counter == 0) 
    { 
     MessageBox.Show($"No matches for \"{this.textBoxSearch.Text}\" found!", "Search Results", 
         MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
    else 
    { 
     MessageBox.Show($"{counter} items found for \"{this.textBoxSearch.Text}\"!", "Search Results", 
         MessageBoxButtons.OK, MessageBoxIcon.Information); 
    } 
} 

Hinweis:
Da C# 6 Sie string interpolation statt String.Format() oder String-Verkettung (+) verwenden können.

Verwandte Themen