c#过滤列表框与文本框
问题描述:
我需要一种方式来过滤列表的变量名称,我想要更新过滤器一样快,我写在文本框中。并将游戏添加到表单列表框中。名单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);
}
}
答
我想出了一个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
答
我没有看到你的代码进行任何过滤,所以也许是你的问题。您可以使用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);
欢迎计算器!本网站有助于解决您的代码问题。当您的结果与预期不同时,或者出现错误时,您应该在此处发布您的代码。你也应该描述**你有什么结果,什么是预期和/或提供错误细节**。之后社区将帮助你解决问题,并且(有时)它会给你一些指导。这就是stackoverflow的工作原理。正如你所看到的,你的问题没有全部适当的信息。如果你想得到一些帮助,请**编辑**你的问题和其他必需的信息。 –
你的问题是什么? – Fischermaen
重构你的问题 – Rakesh