当我在checkedListBox1中检查列表中的项目并使用textBox1搜索某些项目时,我以前的检查已消失。当我使用textBox1搜索并检查列表中的某个项目并搜索之前检查过的另一个项目时,它也消失了。有什么办法吗? C#
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);
}
答案 0 :(得分:0)
在代码顶部注释掉Clear()方法。这应该表明您正在清除这些值。然后按照需要清除和清除的方式进行操作。
答案 1 :(得分:0)
好吧,您的问题基本上出在ladujZBazy()
的以下几行:
checkedListBox1.Items.Clear();
indexes.Clear();
您要在其中清除checkedListBox1
的所有内容及其存储索引的地方。
因此,每次调用函数时,您都要清除checkedListBox1
中的所有内容,然后重新创建/追加内容。因此,它只是刷新checkedListBox1
中的所有项目(,即删除列表中所有已检查的项目。)。
因此,我们有2种方法可以使其发挥作用。
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
或者我们可以将索引和选中的项目清除和CheckListBox刷新逻辑移至单独的函数,如下所示:
private void refreshChkListBox()
{
checkedListBox1.Items.Clear();
listSurowceTabela.Clear();
indexes.Clear();
//your code to append items to list goes here
}
然后在需要时调用此函数以刷新CheckListBox
。