我有一个数据库“ 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++;
                }
            }
        }
    }

这与我配合得很好,希望它能使您受益...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top