H,
我有一个listView,事件设置为ItemChecked,现在我需要做类似的事情:
var tmp = this.listView.ItemChecked;
this.listView.ItemChecked = null; //set the event to null
// run some code which checkes some item in the list
// wehre the event shouldnt get fired on
this.listView.ItemChecked = tmp; //set the event again
问题是我无法阅读该事件,我得到的消息是它只能在声明的左侧使用。
任何想法?
答案 0 :(得分:1)
this.listView.ItemChecked -= myEventHandler;
// run some code
this.listView.ItemChecked += myEventHandler;
答案 1 :(得分:1)
您可以取消订阅并重新订阅以执行您要执行的操作:
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
listView1.ItemChecked -= new ItemCheckedEventHandler(listView1_ItemChecked);
// do stuff
listView1.ItemChecked += new ItemCheckedEventHandler(listView1_ItemChecked);
}
答案 2 :(得分:1)
您可以删除然后添加事件处理程序。假设您的代码位于名为ItemChecked的方法
中listView.ItemChecked -= ItemChecked;
// do whatever
listView.ItemChecked += ItemChecked;
但是,我更喜欢检查可重入的电话。
object alreadyInItemChecked;
void ItemChecked(object s, EventArgs e)
{
if (Monitor.TryEnter(alreadyInItemChecked))
{
try
{
// do whatever
}
finally
{
Monitor.Exit(alreadyInItemChecked)
}
}
}
答案 3 :(得分:0)
您可以按照这样的方式订阅/取消订阅活动。
this.someObject.someObjectEvent += someEventHandler;
this.someObject.someObjectEvent -= null;
因此,当您希望触发事件时订阅,并在不需要时取消订阅。