选中的列表框项目检查事件奇怪的行为

时间:2013-04-19 16:39:10

标签: c# checkedlistbox

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (checkedListBox1.GetItemChecked(i) == false) 
    {
        ...
    }
    else
    {
        ...
    }
}

出于某种原因,当上面的代码执行时,它与我希望的相反。当第一次检查某个项时它没有做任何事情,但是,当它被取消选中时,它会执行else语句中的内容(再次,与它应该做的相反)。我在这里忘记了一些财产吗?

2 个答案:

答案 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