为什么添加后listview会触发事件,表示选中的项未选中

本文关键字:表示 事件 添加 listview 为什么 | 更新日期: 2023-09-27 18:09:11

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

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

然而,在添加项目之后,我立即收到一个事件,表明该项目未被选中(e.Item。

然后我收到一个后续事件,表明它已被检查(e.Item)。

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

非常感谢任何帮助。

为什么添加后listview会触发事件,表示选中的项未选中

似乎当每个ListViewItem的CheckBox被添加到ListView时,它最初被设置为unchecked,从而触发ItemChecked事件。

在你的例子中,CheckBox被设置为checked,以匹配再次触发事件的IT.Checked = true;

这似乎是设计的,我不认为有方法可以阻止这些事件在加载时触发。

一个工作(虽然有点hack)是检查ListView的FocusedItem属性,因为这是空的,直到ListView被加载并在那里保留对ListItem的引用。

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

我也遇到过同样的困境,并且比jdavies的回答更局部地解决了它,通过简单地过滤掉初始的"非用户引起的非检查状态",如下所示

void listView_ItemChecked(object sender, ItemCheckedEventArgs e)
{
    if (!e.item.Checked && !e.item.Focused)
        return; // ignore this event
    //
    // do something
}