2015-10-15 113 views
-2

我需要一種方式來過濾列表的變量名稱,我想要更新過濾器一樣快,我寫在文本框中。並將遊戲添加到表單列表框中。名單c#過濾列表框與文本框

結構爲:

public class Games 
{ 
    public string ID; 
    public string Name; 
    public string Password; 
} 

這裏是我到目前爲止的代碼:

List<Games> games = new List<Games>(); 
    private void textBox10_TextChanged(object sender, EventArgs e) 
    { 
     d2ngList.Items.Clear(); 
     foreach(Games game in games) 
     { 
      //Filter List 
      d2ngList.Items.Add(game.Name); 
     } 
    } 
+0

歡迎計算器!本網站有助於解決您的代碼問題。當您的結果與預期不同時,或者出現錯誤時,您應該在此處發佈您的代碼。你也應該描述**你有什麼結果,什麼是預期和/或提供錯誤細節**。之後社區將幫助你解決問題,並且(有時)它會給你一些指導。這就是stackoverflow的工作原理。正如你所看到的,你的問題沒有全部適當的信息。如果你想得到一些幫助,請**編輯**你的問題和其他必需的信息。 –

+0

你的問題是什麼? – Fischermaen

+0

重構你的問題 – Rakesh

回答

0

我想出了一個solutin

private void textBox10_TextChanged(object sender, EventArgs e) 
    { 
     d2ngList.Items.Clear(); 
     foreach(Games game in HandlerClass.Instance.Games) 
     { 
      if (!string.IsNullOrEmpty(textBox10.Text)) 
      { 
       if (game.Name.Contains(textBox10.Text)) 
        d2ngList.Items.Add(game.Name); 
      } 
      else 
       d2ngList.Items.Add(game.Name); 
     } 
     // games.Where(item => filterList.Contains(item)); 
    } 
+0

'if(!string.IsNullOrEmpty(textBox10.Text))'是無用的。過濾器值不能爲空。如果它是空的,那麼'game.Name.Contains(textBox10.Text)'將永遠是真的。出於某種原因你討厭LINQ? –

+1

以及我以任何方式最終使用LINQ – Gunzmo

2

我沒有看到你的代碼進行任何過濾,所以也許是你的問題。您可以使用LINQ通過名稱來過濾遊戲:

private void textBox10_TextChanged(object sender, EventArgs e) 
{ 
    string filter = textBox10.Text; 
    d2ngList.Items.Clear(); 
    foreach(Games game in games.Where(g => g.Name.Contains(filter))) 
    { 
     d2ngList.Items.Add(game.Name); 
    } 
} 

你也可以用AddRange方法優化代碼:

string filter = textBox10.Text; 
    d2ngList.Items.Clear(); 
    string[] names = games 
     .Where(g => g.Name.Contains(filter)).Select(g => g.Name).ToArray(); 
    d2ngList.Items.AddRange(names);