带文本框的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);
        }
    }

带文本框的c#过滤列表框

我在你的代码中没有看到任何过滤,所以可能是你的问题。你可以使用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));
    }