我有一个绑定源如下:
BindingSource bs = new BindingSource(dsOptions, "students");我增加了一项活动如下:
bs.ListChanged += new ListChangedEventHandler( (object sender, ListChangedEventArgs e) =>
{
lblCount.Text = bs.Count.ToString();
});请注意,我添加了该事件,而没有将其作为以下代码行放在单独的函数中:
bs.ListChanged += new ListChangedEventHandler( listCount);
private void listCount(object sender, ListChangedEventArgs e)
{
lblCount.Text = bs.Count.ToString();
}但这不是我要找的。
在我的例子中,如何删除ListChanged事件?
发布于 2018-03-18 22:26:51
您应该非常小心,因为您可以很容易地在添加处理程序不止一次,或者更糟糕的是,添加越来越多的处理程序时出现错误。这实际上不是事件处理程序的目的。通常,如果您需要禁用事件处理程序,这意味着您不应该使用事件处理程序(相反,您应该在设置包装器属性时更新文本,或者更容易禁用)。
但是你问了,所以你可以这么做:
var handler = new ListChangedEventHandler( (object sender, ListChangedEventArgs e) =>
{
lblCount.Text = bs.Count.ToString();
});
// keep handler in a member variable so you can refer to it later.
bs.ListChanged -= handler; // remove it just in case it’s been added before; there’s no harm, even if it hasn’t already been added.
bs.ListChanged += handler;
...
//later remove it
bs.ListChanged -= handler; // remove it
// do your logic where you want the handler disabled.
// now add it back.
bs.ListChanged -= handler; // remove it just in case it’s been added before; there’s no harm, even if it hasn’t already been added.
bs.ListChanged += handler;再说一次,这很容易出错。而且很难找出这个bug;没有简单的方法来检查您是否不止一次地检查+=‘d。如果您不太小心,您会意外地多次添加处理程序,这可能会使代码设置lblCount.Text多次被调用,并可能导致您的程序变得越来越慢,所以我建议您找到另一种方法。
https://stackoverflow.com/questions/49350735
复制相似问题