C#搜索listBox

时间:2011-02-02 19:29:41

标签: c# winforms search listbox

我在一个名为listBox1的listBox中有大量项目。我的顶部还有一个textBox(textBox1)。我希望能够输入textBox并且listBox搜索它的项目并查找包含我正在输入的内容。

例如,假设listBox包含

“猫”

“犬”

“胡萝卜”

和“Brocolli”

如果我开始输入字母C,那么我希望它显示Cat和Carrot,当我输入它时它应该继续显示它们,但是当我添加一个r它应该从列表中删除Cat。反正有吗?

5 个答案:

答案 0 :(得分:5)

过滤列表框。试试这个:

    List<string> items = new List<string>();
    private void Form1_Load(object sender, EventArgs e)
    {
        items.AddRange(new string[] {"Cat", "Dog", "Carrots", "Brocolli"});

        foreach (string str in items) 
        {
            listBox1.Items.Add(str); 
        }
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        listBox1.Items.Clear();

        foreach (string str in items) 
        {
            if (str.StartsWith(textBox1.Text, StringComparison.CurrentCultureIgnoreCase))
            {
                listBox1.Items.Add(str);
            }
        }
    }

答案 1 :(得分:2)

答案 2 :(得分:1)

基本的例子;但这应该让你开始......

    public partial class Form1 : Form
    {
        List<String> _animals = new List<String> { "cat", "carrot", "dog", "goat", "pig" };

        public Form1()
        {
            InitializeComponent();

            listBox1.Items.AddRange(_animals.ToArray());
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            String search = textBox1.Text;

            if (String.IsNullOrEmpty(search))
            {
                listBox1.Items.Clear();
                listBox1.Items.AddRange(_animals.ToArray());
            }

            var items = (from a in _animals
                        where a.StartsWith(search)
                        select a).ToArray<String>();

            listBox1.Items.Clear();
            listBox1.Items.AddRange(items);
        } 
    }

答案 3 :(得分:1)

为了获得ask期望的结果,你必须使用Contains方法而不是StartWith方法。 像这样: -

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        listBox1.Items.Clear();

        foreach (string str in items)
        {
            if (str.ToUpper().Contains(textBox1.Text.ToUpper()))
            {
                listBox1.Items.Add(str);
            }
        }
    }

我正在寻找这个。

答案 4 :(得分:0)

我认为您需要使用linq查询然后数据绑定结果。 WPF中的一个例子是here,但我相信你可以在winforms中做同样的事情。