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

由于某种原因,当上面的代码执行时,它的作用与我想要的相反。当一个项目第一次被选中时,它什么都不做,然而,当它被取消选中时,它会做 else 语句中的事情(同样,与它应该做的事情相反)。我在这里忘记了一些财产吗?

4

2 回答 2

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. 这将导致在单击复选框列表项本身时选中复选框。

于 2013-04-19T16:44:40.563 回答
0

MSDN指示检查状态在 ItemCheck 事件完成之前不会更新。您可能正在寻找e.NewValue

于 2013-04-19T16:43:54.660 回答