带文本框的c#过滤列表框
本文关键字:过滤 列表 文本 | 更新日期: 2023-09-27 18:17:52
我需要一种方法来过滤列表的变量名,我想更新过滤器的速度,因为我在文本框中写入。并将游戏添加到表单列表中。
list的结构为:
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);
}
}
我在你的代码中没有看到任何过滤,所以可能是你的问题。你可以使用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);
我找到了一个解决办法
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));
}