2015-10-15 70 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);