private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (checkedListBox1.GetItemChecked(i) == false)
{
...
}
else
{
...
}
}
出于某种原因,当上面的代码执行时,它与我希望的相反。当第一次检查某个项时它没有做任何事情,但是,当它被取消选中时,它会执行else语句中的内容(再次,与它应该做的相反)。我在这里忘记了一些财产吗?
答案 0 :(得分:4)
您应该使用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
。只要单击复选框或列表项本身,这将导致复选框被选中。
答案 1 :(得分:0)
MSDN表示在完成之前,ItemCheck事件中的检查状态不会更新。你可能正在寻找e.NewValue。