Tural_m Ответов: 1

Я пытаюсь создать окно поиска для своего listview, но оно работает неправильно


The code only works once when you start


Что я уже пробовал:




private void textBox1_TextChanged(object sender, EventArgs e)
       {
           for (int i = 0; i < listView1.Items.Count; i++)
           {

              if (listView1.Items[i].SubItems[0].Text.Contains(textBox1.Text) ||
              listView1.Items[i].SubItems[1].Text.Contains(textBox1.Text) ||
              listView1.Items[i].SubItems[2].Text.Contains(textBox1.Text))
               {
                   productList.Add(listView1.Items[i]);
               }
           }

           if ( !(string.IsNullOrWhiteSpace(textBox1.Text)) )
           {
               foreach (ListViewItem item in listView1.Items)
               {
                   if (productList.Find(x => x == item) == null)
                   {
                       listremovedProducts.Add(item);
                       listView1.Items.Remove(item);
                   }
               }

           }
           else
           {
               try
               {
                   foreach (var item in listremovedProducts)
                   {
                       listView1.Items.Add(item);
                   }
               }
               catch (Exception) { };
           }
       }
   }

j snooze

Вы вообще пытались установить точку останова и отладить код? возможно, это прольет свет на вашу проблему.

Tural_m

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

CHill60

это вызывается для каждого символа, который вы вводите в textBox1 - попробуйте использовать другое событие ... ищите те, которые содержат "действительные"

Tural_m

Хорошо, я попробую

Ammar Shaukat

Это не так уж сложно . Сначала вы должны провести некоторое время с бумагой и карандашом, чтобы сделать хорошую логику для вашей задачи. Как только вы закончите с этим, тогда переходите к коду и отладке, если вы не получите правильный вывод.

Tural_m

Спасибо, ребята, решил я

1 Ответов

Рейтинг:
4

Tural_m

<pre> private void textBox1_TextChanged(object sender, EventArgs e)
        {
           
            if (!string.IsNullOrWhiteSpace(textBox1.Text))
            {
                for (int i = 0; i < listView1.Items.Count; i++)
                {

                    if ((listView1.Items[i].SubItems[0].Text.Substring(0,textBox1.Text.Length) != textBox1.Text ||
                   listView1.Items[i].SubItems[1].Text.Substring(0,textBox1.Text.Length) != textBox1.Text||
                   listView1.Items[i].SubItems[2].Text.Substring(0, textBox1.Text.Length) != textBox1.Text))
                    {
                       
                        listView1.Items.Remove(listView1.Items[i]);
                        i--;
                    }
                }
            }
            else
            {
                foreach (ListViewItem item in listView1.Items)
                {
                    listView1.Items.Remove(item);
                }
                foreach (ListViewItem item in listesas)
                {
                    listView1.Items.Add(item);
                }
            }
        }