如何刪除事件?
回答
這可能有幫助;
Button btn = new Button();
this.Controls.Add(btn);
btn.Click += (o, x) =>
{
Button b = o as Button;
FieldInfo eventclick = typeof(Control).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
object eventValue = eventclick.GetValue(b);
PropertyInfo events = b.GetType().GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);
EventHandlerList eventHandlerList = (EventHandlerList)events.GetValue(b, null);
eventHandlerList .RemoveHandler(eventValue, eventHandlerList [eventValue]);
MessageBox.Show("Test");
};
簡短的回答:你不能,你只能通過-=
刪除事件的處理程序。如果你想刪除處理程序,那麼不要使用匿名方法。而不是使用預定義的方法,如:
button.Click += OnButtonClick;
private void OnButtonClick(object sender, EventArgs e)
{
//some code
}
正確的語法是
button.Click += (o, e) => { /*code*/ };
你不能刪除,因爲它是一個anomynous方法(拉姆達)。如果您希望能夠移除事件處理程序,則必須將代碼移至其他方法。
如果您保存lambda作爲一個代表:
EventHandler<EventArgs> handler = (o, e) => { //code };
您可以添加/刪除:
button.Click += handler;
button.Click -= handler;
不過,我會強烈反對這一點。改用一個命名方法。
+1,對於「lambda方式」,實際上是在想它是怎樣的。 – Tigran
-1我很肯定你可以刪除lambdas,如果你存儲它。 – CodesInChaos
是的,你是對的。 – Femaref
如果您存儲委託,則可以這樣做。
Button button=new Button();
EventHandler<...> handler=(o,e)=>
{
//Somecode
}
button.Click+=handler;
button.Click-=handler;
但我建議使用一個名爲方法來代替。我看不到在這裏使用lambda的好處。
+1最接近OP要求的內容(禁止他的語法錯誤)。它不是必需的*,可以通過匿名代理使用命名方法,只需*推薦*。 – BoltClock
- 1. 如何刪除事件?
- 2. 如何刪除Click事件?
- 3. 刪除事件
- 4. 如何刪除樣式單擊事件?
- 5. 如何刪除事件偵聽器?
- 6. Raphael JS:如何刪除事件?
- 7. 如何枚舉和刪除Windows事件?
- 8. 如何刪除$(document).on點擊事件?
- 9. 如何刪除FullCalendar上的事件?
- 10. 如何刪除JCEMediabox.Popup.Init()添加的事件
- 11. 如何刪除事件偵聽器?
- 12. 如何使用Eventbrite API刪除事件?
- 13. 如何刪除以前的事件?
- 14. 如何用Foursquare API刪除事件?
- 15. 如何刪除Clipboard.js單擊事件
- 16. 如何刪除切換事件?
- 17. 如何在VB.NET刪除事件處理
- 18. 如何刪除點擊事件的類?
- 19. jQuery的如何扭轉刪除()事件
- 20. 如何從nicEditor + emberjs中刪除事件
- 21. 如何刪除YUI委託事件?
- 22. Azure EventHub - 如何刪除事件?
- 23. 如何刪除未保存的事件?
- 24. Orchard CMS:如何取消刪除事件
- 25. FullCalendar事件刪除
- 26. 刪除JavaScript事件
- 27. Javascript事件刪除
- 28. GTK刪除事件
- 29. 刪除錘事件
- 30. 如何從Dhtmlx Scheduler「onLightbox」事件中刪除刪除按鈕?
你如何添加這樣的事件?這甚至不會編譯。 – BoltClock
它缺少'+ =',但其餘的是有效的代碼,它是一個lambda方法。 – Femaref
而不是刪除事件添加類成員作爲一種「標誌」 - 當提出時,忽略點擊。 –