2012-08-16 42 views
1

我很難找到一個可行的方式來搜索字符串List<>我有匹配的用戶指定的字符串,我甚至不知道我在做什麼最好的方式,但我走到這一步是:查看列表<string>與用戶定義的字符串匹配

// This is the input string. 
     string input = userDefinedStr.ToLower(); //New variable and made into lower cases.   

     for (int i = 0; i < listBox1.Items.Count; i++) 
     { 
      if (listBox1.Items[i].ToString().IndexOf(input, stringComparison.OrdinalIgnoreCase) >= 0) 
      { 
       listBox1.SetSelected(i, true); 
      } 
      else 
      { 
       MessageBox.Show("Sorry, There was no matches found.", "An oupps happend!");      
      } 

     } 

的問題是,可以有更多的包含用戶定義字符串List的一個字符串,我想,最好的辦法其實是顯示所有List<string>匹配listBox1而不是僅標記找到的第一個。

還是可以用另一種更有效的方式來完成?!?我已經閱讀了這麼多的文章和帖子,但我找不到那個指向我在這個正確的方向我的一個最好的方式,我不覺得我知道最好的方式,我已經閱讀了這麼多的文章和帖子,但我找不到一個指向我在這個正確的方向。

+1

你在哪裏'列表'? – 2012-08-16 14:37:11

+0

@ DanielA.White - 我假設它是'listBox1'的內容。 – Oded 2012-08-16 14:39:26

回答

1

您顯示了一個好的開始,但for中的if聲明,您將得到一個消息框,彈出每個不匹配的項目。

如果您希望使用目前爲止的代碼,只需在for(初始化爲false)之前添加bool,並在找到匹配項時將其設置爲true。一旦for完成,測試bool,如果它仍然是假的,沒有找到匹配,所以你應該顯示你的消息框。我很懷疑它可以在Linq中以更少的擊鍵來完成,但它可能不像閱讀/理解那樣容易,取決於和可維護(易於閱讀/理解)代碼優於聰明,因爲你必須稍後解決它。

1

您可以過濾列表框的內容以僅顯示符合搜索條件的項目。所有其他項目被刪除。這意味着listBox1不包含實際數據,但僅包含數據視圖,並且完整數據存儲在其他位置。還必須有一種方法讓用戶重置過濾器,以便可以再次使用完整的數據集。

相關問題