контрольный список поиска в текстовом поле, но не помню отмеченные элементы

Когда я проверял элементы в списке в checkedListBox1 и искал некоторые элементы с помощью textBox1, моя предыдущая проверка исчезла. Когда я ищу с помощью textBox1 и проверяю какой-то элемент в списке, а также ищу другой элемент, ранее проверенный, тоже исчез. Любые решения? С#

void ladujZBazy(string mustContains)
    {
        checkedListBox1.Items.Clear();
        listSurowceTabela.Clear();
        indexes.Clear();

        bazaproduktowDBEntities dc = new bazaproduktowDBEntities();

        var c1 = from d in dc.SurowceTabela select d.NazwaSurowca;
        var c2 = from d in dc.SurowceTabela select "(" + d.PartiaSurowca + ")";
        var c3 = from d in dc.SurowceTabela select d.IloscSurowca;
        var c4 = from d in dc.SurowceTabela select d.JednostkaSurowca;

        listSurowceTabela.Add(c1.ToList());
        listSurowceTabela.Add(c2.ToList());
        listSurowceTabela.Add(c3.ToList());
        listSurowceTabela.Add(c4.ToList());

        for (int i = 0; i < listSurowceTabela[0].Count; i++)
        {
            string strToAdd = "";
            for (int j = 0; j < listSurowceTabela.Count; j++)
            {
                strToAdd += " " + listSurowceTabela[j][i] + " ";
            }
            if (mustContains == null)
            {
                checkedListBox1.Items.Add(strToAdd);
                indexes.Add(i);
            }
            else if (strToAdd.ToLower().Contains(mustContains.ToLower()))
            {
                checkedListBox1.Items.Add(strToAdd);
                indexes.Add(i);
            }

        }
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        ladujZBazy(textBox1.Text);
    }

person Seweryn    schedule 05.02.2019    source источник
comment
поиски удаляются, потому что функция ladujZBazy() их очищает. вы можете передать 2-й параметр вашей функции (bool type), который по умолчанию будет false, пока не будет предоставлен вызывающим абонентом (в вашем случае событие textchanged текстового поля) и оберните ваш checkboxlist очищающий код внутри, если параметр равен true.   -  person vikscool    schedule 05.02.2019
comment
спасибо за совет, но я пытаюсь, и все же проверенные элементы исчезли. Пожалуйста, напишите для этого код с типом bool.   -  person Seweryn    schedule 05.02.2019


Ответы (2)


Закомментируйте методы Clear() в верхней части кода. Это должно продемонстрировать, что вы очищаете эти значения. Затем проработайте свой путь через то, что действительно нужно очистить, а что нет.

person Christopher J. Reynolds    schedule 05.02.2019

Что ж, ваша проблема в основном заключается в этих строках в ladujZBazy():

checkedListBox1.Items.Clear();
indexes.Clear();

где вы звоните, чтобы очистить все содержимое checkedListBox1 и его сохраненные индексы.

Таким образом, при каждом вызове вашей функции вы очищаете все содержимое из checkedListBox1, а затем воссоздаете/добавляете содержимое обратно к нему. Следовательно, он просто обновляет все элементы в checkedListBox1 (т.е. удаляет все уже проверенные элементы в списке.).

Итак, у нас есть 2 способа заставить его работать.

  1. Мы можем добавить параметр Boolean к ladujZBazy(), который будет определять, следует ли очистить checkedListBox1 или нет.

И ваш измененный ladujZBazy() будет выглядеть примерно так:

void ladujZBazy(string mustContains, bool dropIndexes)
{
    // the below code will only run the value is supplied as TRUE
    if(dropIndexes)
    {
        checkedListBox1.Items.Clear();
        listSurowceTabela.Clear();
        indexes.Clear();
    }        

    // your rest of the code goes here
}

А затем вызовите его из события TextChanged вашего текстового поля как:

ladujZBazy(textBox1.Text,false);// pass TRUE to clear the checked items
  1. Или мы можем переместить индекс и проверенный элемент Clearing and CheckListBox Refreshing Logic в отдельную функцию:

    private void refreshChkListBox()
    {
       checkedListBox1.Items.Clear();
       listSurowceTabela.Clear();
       indexes.Clear();
       //your code to append items to list goes here
    }
    

А позже вызовите эту функцию, чтобы обновить CheckListBox, если вам это нужно.

person vikscool    schedule 06.02.2019