问题描述
我在 WinForms 中有一个 CheckedListBox
,它托管在一个控件上,用于指定要在 DataGridView
中显示哪些列。无论我做什么,我都无法以编程方式更改列表中任何单个复选框的状态!我尝试在显示表单时添加它们:
checkedListBoxItems.Add
(
"Column Header Text",true
)
我尝试在添加它们后将它们设置为选中:
checkedListBox.SetItemChecked(0,true);
在这些 checkedListBox.CheckedItems.Count
和 checkedListBox.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')