2016-05-01 2 views
0

TextBoxで結果をフィルタリングしているListViewコントロールがあります。このコードは、一致する結果のバックカラーを強調表示するために機能しますが、合計の結果/強調表示されたオブジェクトをintとして取得したいとします。現在入力されているintが正しくなく、見つかった/強調表示された結果と一致しません。リストビューの総インデックスを取得できません

検索結果の総数はどのように取得できますか?

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

どこが間違っているのか分かりませんか?

答えて

1

あなたは、特定のアイテムで探しているテキストのインデックスにカウントを設定しています。だから、あなたが見つけたアイテムごとに一度それを設定しているので、最後に見つかったアイテムの検索用語のインデックスが得られます。何をしたい

が見つかった項目の数を追跡し、検索が終了したら、それを設定することがあるので、このような何かが(私は他の実装の詳細のほとんどを残してきた):

var foundCount = 0; 

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

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

うん、これはそれでした。私の考えの裏では、if文の中でインクリメントすることを考えていましたが、それは間違っているように感じました。視覚化と説明をありがとう:) – EyeSeeSharp

関連する問題