Как удалить элементы из списка при изменении текстового поля - PullRequest
0 голосов
/ 25 декабря 2011

Я хочу сделать небольшой блок кода о c #.

сначала подумайте о списке с элементами. затем подумайте пустое текстовое поле.

когда я пишу письмо в текстовое поле (не думайте только о букве, думайте о слове, я разделяю его с textbox1_textchanged), если у элемента нет слова, его необходимо удалить из списка.

пример:

вот элементы списка:

abraham
michael
george
anthony

когда я набираю «a», я хочу, чтобы удалялись Майкл и Джордж, а затем, когда я набираю «n», я хочу, чтобы удалялся Авраам (на данный момент общая строка равна «an») ...

Спасибо, теперь (:

Ответы [ 3 ]

3 голосов
/ 25 декабря 2011
private void textBox1_TextChanged(object sender, EventArgs e)
    {
        for (int i = 0; i < listBox1.Items.Count; i++)
        {
            string item = listBox1.Items[i].ToString();
            foreach(char theChar in textBox1.Text)
            {
                if(item.Contains(theChar))
                {
                    //remove the item, consider the next list box item
                    //the new list box item index would still be i
                    listBox1.Items.Remove(item);
                    i--;
                    break;
                }
            }
        }
    }
1 голос
/ 25 декабря 2011

Вы можете отфильтровать элементы, которые не содержат текст, и удалить их из списка:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var itemsToRemove = listBox1.Items.Cast<object>().Where(x => !x.ToString().Contains(textBox1.Text)).ToList();
    foreach(var item in itemsToRemove)
        listBox1.Items.Remove(item);
}
1 голос
/ 25 декабря 2011

Вы можете попробовать что-то вроде этого. Это будет соответствовать тому, что у вас есть в текстовом поле и удалить то, что не соответствует.

private void textBox1_TextChanged(object sender, EventArgs e)
{
    for (int i = 0; i < listBox1.Items.Count ; i++)
    {
        for (int j = 0; j < textBox1.Text.Length  ; j++)
        {
            if (textBox1.Text[j] != listBox1.Items[i].ToString()[j])
            {
                if (i < 0) break;
                listBox1.Items.RemoveAt(i);
                i = i - 1; // reset index to point to next record otherwise you will skip one
            }

        }

    }
}
...