C# 为什么listview会触发事件,指示在添加后未选中选中选中的项
我通过以下代码将项目添加到listview(c#winforms应用程序):C# 为什么listview会触发事件,指示在添加后未选中选中选中的项,c#,.net,winforms,listview,C#,.net,Winforms,Listview,我通过以下代码将项目添加到listview(c#winforms应用程序): var IT = new ListViewItem(Term); IT.Checked = true; MyListView.Items.Add(IT); 但是,在添加该项之后,我立即收到一个事件,指示该项未被选中(例如item.checked为false) 然后,我接收到一个后续事件,该事件指示它已被选中(e.Item.checked为true) 为什么我会收到第一个事件?将项目添加到列表时,是否出于某种原因将ch
var IT = new ListViewItem(Term);
IT.Checked = true;
MyListView.Items.Add(IT);
但是,在添加该项之后,我立即收到一个事件,指示该项未被选中(例如item.checked为false)
然后,我接收到一个后续事件,该事件指示它已被选中(e.Item.checked为true)
为什么我会收到第一个事件?将项目添加到列表时,是否出于某种原因将checked属性设置为false?考虑到我在将其添加到事件之前将checked status设置为true,这似乎有些奇怪
非常感谢您的帮助。提前感谢。似乎当每个ListViewItem的复选框添加到ListView时,它最初被设置为未选中,从而触发ItemChecked事件 在您的情况下,复选框将设置为选中,以匹配
IT.checked=true代码>将再次触发事件
这似乎是出于设计,我不认为有一种方法可以阻止这些事件在加载时触发
解决方法之一(尽管有点麻烦)是检查ListView的属性,因为在加载ListView并保留对ListItem的引用之前,该属性为null
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
}
另一个解决方法:
MyListView.CheckBoxes = false;
MyListView.Items.Add(IT);
MyListView.CheckBoxes = true;
您是如何注册您的事件的?为了帮助您,我们需要查看这些事件处理程序、它们包含的内容以及如何将它们绑定到listview。通过将事件处理程序与visual studio中的“ItemChecked”事件相关联,无需重新创建。什么操作系统?非常感谢。你说得对。查看调用堆栈,我可以看到checked属性确实被设置回false,然后在添加该项后再次设置为true。事实上,我有点惊讶,它又回到了真实的状态,但无论如何,这似乎是一种行为。