C # Поиск списка - PullRequest
       19

C # Поиск списка

3 голосов
/ 02 февраля 2011

У меня есть большое количество элементов в listBox под названием listBox1. У меня также есть текстовое поле (textBox1) в верхней части. Я хочу иметь возможность вводить в textBox и listBox ищет его элементы и находит те, которые содержат то, что я печатаю.

Например, скажем, список содержит

"Cat"

"Собака"

"Морковь"

и "Брокколи"

Если я начну печатать букву C, то я хочу, чтобы она показывала и Cat, и Carrot, когда я набираю a, она должна продолжать показывать их обоих, но когда я добавляю r, это должно удалять Cat из списка. Есть ли в любом случае, чтобы сделать это?

Ответы [ 5 ]

5 голосов
/ 03 февраля 2011

Фильтр списка.Попробуйте это:

    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);
            }
        }
    }
2 голосов
/ 02 февраля 2011

Вот довольно хороший пример: http://www.java2s.com/Code/CSharp/Components/UseanAutocompleteComboBox.htm

1 голос
/ 30 января 2014

Для получения результата, который ожидает запрашиваемый, вы должны использовать метод 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);
            }
        }
    }

Я искал это.

1 голос
/ 02 февраля 2011

рудиментарный пример;однако это должно начать вас ...

    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);
        } 
    }
0 голосов
/ 02 февраля 2011

Я думаю, вам нужно использовать запрос linq, а затем привязать данные к результату. Примером этого в WPF является здесь , но я считаю, что вы можете сделать то же самое в winforms.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...