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