c# - 检查列表框项目检查事件奇怪的行为

标签 c# checkedlistbox

<分区>

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

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

最佳答案

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

关于c# - 检查列表框项目检查事件奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16109481/

相关文章:

"save as"网页及离线浏览的C#工具

c# - CheckedListBox 中不可勾选的项目?

VB.NET CheckedListBox 标签?

c# - 如何获取 CheckedListBox 中的项目 ID?

c# - 如何处理 WPF/MVVM 应用程序中的依赖注入(inject)

c# - 中继器 ItemTemplate 中的 If 语句

WPF/MVVM 将 ListBoxItem 模板中的 CheckBox 绑定(bind)到 SelectedItem 属性

c# - 如何在 Windows 窗体中更改 CheckedListBox 中选定项的颜色?

c# - 类型转换为具有相同属性的另一个

c# - 公共(public)访问器 .net