如何防止一次操作触发多个同类事件?
例如,我有一个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);
}
}