无法以编程方式单独选中 CheckedListBox 中的复选框

问题描述

我在 WinForms 中有一个 CheckedListBox,它托管在一个控件上,用于指定要在 DataGridView显示哪些列。无论我做什么,我都无法以编程方式更改列表中任何单个复选框的状态!我尝试在显示表单时添加它们:

checkedListBoxItems.Add
(
    "Column Header Text",true
)

我尝试在添加它们后将它们设置为选中:

checkedListBox.SetItemChecked(0,true);

在这checkedListBox.CheckedItems.CountcheckedListBox.Checkedindices.Count 之后是 0。我还发现,在调试时,我可以通过 checkedListBox.Items.InnerArray.entries[0].state 检查选中状态,这也是 0 - 但是,如果我将其更改为 1,它实际上会检查有问题的复选框。因此,我随后尝试使用反射获取该字段,但使用 .GetField("state",BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField) 获取该字段并返回 null - 因此我无法在运行时使用它!

我也尝试过 DataBinding,但发现它不是双向的,因此对于这项任务毫无价值(我仍然必须调用 SetItemChecked,但它不起作用!)。

我已经设置了一个简单的副项目,只是为了使用已检查的状态参数和 Add 调用 SetItemChecked 并且出于某种原因它们确实在该项目中工作!知道这个 CheckedListBox 控件可能处于什么状态导致它在我的主项目中不起作用吗?

解决方法

这在这里很有效:

private void Form1_Load(object sender,EventArgs e)
{
    // Create sample data
    checkedListBox1.Items.Add("Option A",true);
    checkedListBox1.Items.Add("Option B",false);
    checkedListBox1.Items.Add("Option C",false);
}

private void button1_Click(object sender,EventArgs e)
{
    // This button toggle the "Option B" entry value
    bool val = checkedListBox1.GetItemChecked(checkedListBox1.FindStringExact("Option B")); 
    checkedListBox1.SetItemChecked(1,!val);
}
,

看看这是否有帮助,需要一个名为 checkedListBox1 的 checkedListBox、一个名为 GetButton 的按钮、一个名为 CheckItButton 的按钮和一个名为 checkedBox1 的 CheckBox。

sns.pairplot(df,hue='espécie',diag_kind= "hist",palette='hls')