如何在用户选择ListView控件中的范围时响应ONCE?

时间:2010-09-08 10:17:38

标签: c# listview

我正在尝试处理用户更改列表框中选择的项目(通过更新所选内容的信息),但如果选择范围(使用shift + select),它实际上会触发单独的“ItemSelectionChanged”事件对于已选择/取消选择的每个项目,即如果您选择了100个项目,则会获得100个事件,并且第一次调用事件处理程序时,它似乎无法知道还有更多项目。

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

1 个答案:

答案 0 :(得分:4)

没有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...
    }