C# 选中列表框项检查事件异常行为

C# 选中列表框项检查事件异常行为,c#,checkedlistbox,C#,Checkedlistbox,由于某种原因,当上面的代码执行时,它会执行与我所希望的相反的操作。当一个项目第一次被选中时,它不会做任何事情,但是,当它被取消选中时,它会做else语句中的事情(同样,与它应该做的相反)。这里有什么我忘记的属性吗?表示检查状态在ItemCheck事件中直到完成后才更新。您可能正在查找。您应该使用e.NewValue而不是checkedListBox1.GetItemChecked(i)。原因是checkedListBox1.GetItemChecked是缓存状态,因为ItemCheck事件发生在

由于某种原因,当上面的代码执行时,它会执行与我所希望的相反的操作。当一个项目第一次被选中时,它不会做任何事情,但是,当它被取消选中时,它会做else语句中的事情(同样,与它应该做的相反)。这里有什么我忘记的属性吗?

表示检查状态在ItemCheck事件中直到完成后才更新。您可能正在查找。

您应该使用
e.NewValue
而不是
checkedListBox1.GetItemChecked(i)
。原因是
checkedListBox1.GetItemChecked
是缓存状态,因为
ItemCheck
事件发生在内部值更新之前

这将按照您的预期工作:

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

其次,关于为什么第一次单击复选框时,它没有反应:这是因为
CheckedListBox
object要求在通过鼠标单击更改复选框值之前突出显示该项


为了达到类似效果,请设置
checkedListBox1.CheckOnClick=true
。这将导致每当单击复选框或列表项本身时,复选框都被选中。

谢谢,我的代码现在正常工作。@EmilyJohnson很高兴它起到了作用。=)
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (e.NewValue == CheckState.Checked) 
    {
        ...
    }
    else
    {
        ...
    }
}