Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么listview会触发事件,指示在添加后未选中选中选中的项_C#_.net_Winforms_Listview - Fatal编程技术网

C# 为什么listview会触发事件,指示在添加后未选中选中选中的项

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

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

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。事实上,我有点惊讶,它又回到了真实的状态,但无论如何,这似乎是一种行为。