Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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#_Listview - Fatal编程技术网

C# 当用户在ListView控件中选择一个范围时,您如何响应一次?

C# 当用户在ListView控件中选择一个范围时,您如何响应一次?,c#,listview,C#,Listview,我试图处理用户更改列表框中所选项目的情况(通过更新有关所选项目的信息),但如果您选择一个范围(使用shift+select),它实际上会为每个选中/取消选中的项目触发一次单独的“ItemSelectionChanged”事件,即,如果您选择100个项目,您将获得100个事件,第一次调用事件处理程序时,它似乎无法知道还会有更多 有没有办法在选择/取消选择项目的过程完成之前不做出响应?没有SelectedItemsChanged事件,我猜您的意思是SelectedIndexChanged。您可以做的

我试图处理用户更改列表框中所选项目的情况(通过更新有关所选项目的信息),但如果您选择一个范围(使用shift+select),它实际上会为每个选中/取消选中的项目触发一次单独的“ItemSelectionChanged”事件,即,如果您选择100个项目,您将获得100个事件,第一次调用事件处理程序时,它似乎无法知道还会有更多


有没有办法在选择/取消选择项目的过程完成之前不做出响应?

没有SelectedItemsChanged事件,我猜您的意思是SelectedIndexChanged。您可以做的是利用Control.BeginInvoke()方法。在触发所有事件后,当UI线程再次空闲时,委托目标开始运行。让它看起来像这样:

    bool listUpdated = false;

    private void listView1_SelectedIndexChanged(object sender, EventArgs e) {
        if (!listUpdated) {
            this.BeginInvoke(new MethodInvoker(updateList));
            listUpdated = true;
        }
    }

    private void updateList() {
        listUpdated = false;
        // etc...
    }

没有SelectedItemsChanged事件,我猜您的意思是SelectedIndexChanged。您可以做的是利用Control.BeginInvoke()方法。在触发所有事件后,当UI线程再次空闲时,委托目标开始运行。让它看起来像这样:

    bool listUpdated = false;

    private void listView1_SelectedIndexChanged(object sender, EventArgs e) {
        if (!listUpdated) {
            this.BeginInvoke(new MethodInvoker(updateList));
            listUpdated = true;
        }
    }

    private void updateList() {
        listUpdated = false;
        // etc...
    }

不,我是说ItemSelectionChanged。。我错误地选择了事件处理程序的名称,而不是事件的名称。嗯,完全相同的方法。我的答案仍然有效。但不影响逻辑,这很有效,谢谢。奇怪的是,这个布尔值的更好的名字不是“listUpdating”吗?编辑:嘿,当我输入这个时,没有看到你的评论。@HansPassant我如何修改这个答案以从被触发的最后一个事件中获取最后一个项目?请看下面的问题:不,我的意思是ItemSelectionChanged。。我错误地选择了事件处理程序的名称,而不是事件的名称。嗯,完全相同的方法。我的答案仍然有效。但不影响逻辑,这很有效,谢谢。奇怪的是,这个布尔值的更好的名字不是“listUpdating”吗?编辑:嘿,当我输入这个时,没有看到你的评论。@HansPassant我如何修改这个答案以从被触发的最后一个事件中获取最后一个项目?请参见此处的后续问题: