c# - 为什么 ListView 会触发事件,指示添加后未选中选中的项目

标签 c# .net winforms listview

我通过以下代码将项目添加到 ListView (c# winforms 应用程序):

var IT = new ListViewItem(Term);
IT.Checked = true;
MyListView.Items.Add(IT);

但是,在添加项目后,我立即收到一个事件,表明该项目未被选中(e.Item.Checked 为 false)。

然后我收到一个后续事件,表明它已被选中(e.Item.Checked 为真)。

为什么我会收到第一个事件?当我将项目添加到列表时,是否出于某种原因将选中的属性设置为 false?考虑到我在将其添加到我的事件之前将选中状态设置为 true,这似乎很奇怪。

非常感谢任何帮助。提前致谢。

最佳答案

似乎当每个 ListViewItem 的 CheckBox 添加到 ListView 时,它最初设置为未选中,这会触发 ItemChecked 事件。

在您的情况下,CheckBox 然后被设置为已选中以匹配 IT.Checked = true; 再次触发事件。

这似乎是设计使然,我认为没有一种方法可以阻止这些事件在加载时触发。

一个解决方法(虽然有点 hack)是检查 FocusedItem ListView 的属性,因为在加载 ListView 并在此之后保留对 ListItem 的引用之前,该属性为 null。

void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
    if (listView1.FocusedItem != null)
    {
        //Do something
    }
}

希望这对您有所帮助。

关于c# - 为什么 ListView 会触发事件,指示添加后未选中选中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506588/

相关文章:

c# - 如何在 Visual Studio 2017 解决方案中创建 "content only"项目?

c# - 正则表达式替换大小写不敏感问题

c# - 如何自动单击表单应用程序上的按钮?

c# - 如何跨 MVC 站点共享通用样式信息(css、图像等)?

c# - 与 TPT 代码优先 Entity Framework 中的引用约束冲突

c# - 确定类型是否可实例化或可用

未输入任何值时,C# TextBox to int() 不工作

c# - 在 Mono 3 (Ubuntu 12.10) 上使用 WinForms

c# - WPF ListView 将 SelectedItem 与相同的项目混淆

c# - 如何将 DateTimePicker 控件设置为特定日期?