c#使用文本框过滤列表框

时间:2015-10-15 08:29:41

标签: c# filter listbox

我需要一种方法来过滤列表的变量名称,我想像在文本框中一样快地更新过滤器。并将游戏添加到表单列表框。

列表的结构是:

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);
        }
    }

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我想出了一个解决方案

    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));
    }