gpt4 book ai didi

c# - 在 ItemCheck 事件后清除 CheckedListBox

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:54 32 4
gpt4 key购买 nike

在我用 C# 编写的 Windows 窗体项目中,我尝试在选中最后一个项目后清除 CheckedListBox。

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (checkedListBox1.CheckedItems.Count + 1 == checkedListBox1.Items.Count)
{
checkedListBox1.Items.Clear();
}
}

在此示例中,程序将在我检查最后一项后抛出 NullReferenceException。

有人可以解释为什么会发生这种情况以及我该如何处理吗?

提前致谢!

最佳答案

更改代码以在项目的检查状态更新后运行逻辑:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
checkedListBox1.BeginInvoke(new Action(() =>
{
if (checkedListBox1.CheckedItems.Count == checkedListBox1.Items.Count)
{
checkedListBox1.Items.Clear();
}
}));
}

根据documentations ,默认情况下,当 ItemCheck 事件引发时,直到 ItemCheck 事件发生后,项目的检查状态才会更新。这意味着它会在运行事件处理程序中的代码后尝试更新项目的检查状态。作为您的代码的结果,它会尝试在从项目集合中删除项目后更新项目检查状态,这就是发生异常的原因。您可以在堆栈跟踪中看到发生了什么,也在 source code 中。的控制。

在上面的代码中,我们使用 BeginInvoke 在检查状态更新后延迟运行代码。您可以在 this post 中阅读更多相关信息.

关于c# - 在 ItemCheck 事件后清除 CheckedListBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52244315/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com