如何防止一次操作触发多个同类事件?

例如,我有一个ListView包含一些项目。当我选择或取消选择所有项目时,每个项目都会触发一次SelectedIndexChanged事件。而是,我想接收一个事件指示,指示用户的操作(项目的选择/取消选择),而与项目的数量无关。

有什么办法可以做到这一点?

最佳答案

您不能更改ListView代码,并且对其进行子类化并不能提供很多选项。

我建议您只是在代码中添加一个小的延迟(200毫秒或类似的延迟),即,您只在最后一次更新后进行一小段时间的计算。就像是:

using System;
using System.Windows.Forms;
static class Program {
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        ListView list;
        TextBox txt;
        Timer tmr = new Timer();
        tmr.Interval = 200;
        Form form = new Form {
            Controls = {
                (txt = new TextBox { Dock = DockStyle.Fill, Multiline = true}),
                (list = new ListView { Dock = DockStyle.Right, View = View.List,
                   Items = { "abc", "def" , "ghi", "jkl", "mno" , "pqr"}})
            }
        };
        list.SelectedIndexChanged += delegate {
            tmr.Stop();
            tmr.Start();
        };
        tmr.Tick += delegate {
            tmr.Stop();
            txt.Text += "do work on " + list.SelectedItems.Count + " items"
                 + Environment.NewLine;
        };
        Application.Run(form);
    }
}

09-25 18:53