题
我有一个数据库“ checkedlistbox”,我需要检查其中的一些项目。我尝试了以下代码...
if (!string.IsNullOrEmpty(search.Languages))
{
string[] langs = search.Languages.Split(',');
for (int i = 0; i < (langs.Length - 1); i++)
{
for (int j = 0; j < clbLang.Items.Count; j++)
{
string lng = clbLang.Items[j] as string;
if (lng.Trim() == langs[i])
{
clbLang.SetItemChecked(j, true);
break;
}
}
}
}
没有错误,调试执行正在通过”检查“过程,但最后我看不到任何检查。
然后,我添加了一个按钮并在其中添加了以下代码。 ((单击检查所有项目)
private void button9_Click(object sender, EventArgs e)
{
for (int i = 0; i < clbLang.Items.Count; i++)
{
clbLang.SetItemChecked(i, true);
}
}
这是 ”检查“所有项目,请告诉我是否有人可以在这里看到问题...?
解决方案
终于发现了,这是一个 漏洞 由MS引入。
这里很好地解释了。
这个问题很容易复制。只需隐藏并显示一个数据库CheckEdlistBox,您就会注意到先前检查的项目如何不选中。
checkedlistbox setItemchecked方法不起作用
因此,我们必须找到解决方法...我尝试了Follwing方法,它运行良好...
在我打电话的地方 检查 我添加了以下内容...我正在添加我需要检查的内容 标签 控制。
if (!string.IsNullOrEmpty(search.Languages))
{
clbLang.Tag = search.Languages;
}
然后,在该控件的“ visiblechanged()”事件中遵循代码。
private void clbLang_VisibleChanged(object sender, EventArgs e)
{
string lngs = clbLang.Tag as string;
if (!string.IsNullOrEmpty(lngs))
{
string[] langs = lngs.Split(',');
foreach (string lang in langs)
{
int j = 0;
foreach (DataRowView row in clbLang.Items)
{
if (row != null)
{
string lng = row[1] as string;
if (lng.Trim() == lang)
{
clbLang.SetItemChecked(j, true);
break;
}
}
j++;
}
}
}
}
这与我配合得很好,希望它能使您受益...
不隶属于 StackOverflow