private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (checkedListBox1.GetItemChecked(i) == false)
{
...
}
else
{
...
}
}
由于某种原因,当上面的代码执行时,它做了与我希望它做的相反的事情。当一个项目第一次被选中时,它什么都不做,但是,当它未被选中时,它会执行 else 语句中的操作(同样,与它应该做的相反)。我在这里忘记了一些属性吗?
您应该使用 e.NewValue
而不是 checkedListBox1.GetItemChecked(i)
。原因是 checkedListBox1.GetItemChecked
是一个缓存 状态,因为 ItemCheck
事件发生在 之前 内部值是已更新。
这会如您所愿地工作:
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked)
{
...
}
else
{
...
}
}
其次,至于为什么第一次点击复选框时,它没有反应:那是因为 CheckedListBox
对象要求要突出显示的项目在通过鼠标点击更改复选框值之前。
为了实现类似的效果,设置checkedListBox1.CheckOnClick = true
。这将导致在单击复选框或列表项本身时选中该复选框。