2016-05-01 11 views
0

Ich habe ein ListView-Steuerelement, das ich Ergebnisse mit einer TextBox filtern. Der Code funktioniert, um die Backcolors der übereinstimmenden Ergebnisse hervorzuheben, aber ich möchte die gesamten gefundenen Ergebnisse/markierten Objekte als int erhalten. Die int, die jetzt ausgefüllt wird, ist falsch und nicht in Übereinstimmung mit den gefundenen/hervorgehobenen Ergebnissen.Gesamtindex von Listview kann nicht abgerufen werden

Wie kann ich die Gesamtzahl gefundener/hervorgehobener Ergebnisse ermitteln?

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 

     foreach (ListViewItem lvi in this.browserlistview.Items) 
     { 

      if (textBox1.TextLength > 0) 
      { 


       if (lvi.Text.IndexOf(textBox1.Text, StringComparison.CurrentCultureIgnoreCase) >= 0) 
       { 
        Color b = Color.Cyan; 
        lvi.BackColor = b; 

        foundobjlbl.Text = "Objects found: " + lvi.Text.IndexOf(textBox1.Text, StringComparison.InvariantCultureIgnoreCase).ToString(); 
        //this is turning up incorrect integers 

       } 

       else 
       { 
        Color w = Color.White; 
        lvi.BackColor = w; 

       } 

      } 

      else if (textBox1.TextLength == 0) 
      { 
       Color w = Color.White; 
       lvi.BackColor = w; 

       foundobjlbl.Text = "Objects found : 0"; 
      } 
     } 
    } 

Kann jemand sehen, wo ich falsch liege?

Antwort

1

Sie setzen Ihre Zählung auf den Index des Textes, den Sie in einem bestimmten Artikel suchen. Sie legen es also einmal für jedes gefundene Element fest. Sie erhalten also den Index Ihres Suchbegriffs im letzten gefundenen Element.

Was Sie wollen, ist die Anzahl der gefundenen Objekte zu verfolgen und sie gesetzt, sobald die Suche beendet ist, so etwas wie dieses (ich habe die meisten anderen Implementierungsdetails weggelassen):

var foundCount = 0; 

foreach (var item in items) 
{ 
    if (IsMatch(item)) 
    { 
     // set colour 
     foundCount++; 
    } 
    else 
    { 
     // set white 
    } 
} 

foundobjlbl.Text = $"Objects found {foundCount}"; 
+0

Yup, Das hat es getan. Im Hinterkopf dachte ich daran, innerhalb der if-Anweisung zu erhöhen, aber ich hatte das Gefühl, dass das falsch sein würde. Danke für die Visualisierung und Erklärung :) – EyeSeeSharp