C (WPF)去除事件中註冊的事件處理方法!

2021-09-20 08:34:36 字數 962 閱讀 8344

在wpf中,移除乙個事件中已經註冊的處理方法,看似簡單,實際還是很痛苦的一件事情。因為c#的靈活性,定義事件的方法也是多種多樣。

我自己定義了乙個事件:

public event eventhandler testevent;
當我想登出這個事件上註冊的所有方法的時候,我可以按如下的方法進行

delegate dels = testevent.getinvocationlist();

foreach (var d in dels)

但是,當我想登出乙個window上的closed上註冊的事件時,發現在closed上根本沒有getinvocationlist方法。這是怎麼回事呢。通過反編譯檢視微軟的**,它的定義是這樣的:

public event eventhandler closed

remove{}

}

坑爹啊。度娘了半天,終於找到下面的方法參考完成。

/// /// 清除乙個物件的某個事件所掛鉤的delegate

///

/// 控制項物件

/// 事件名稱,預設的

public static void clearevents(this object ctrl, string eventname = "_eventall")

}catch }}

原來的**中 ei.declaringtype.getfield("event_" + ei.name, bindingflags);的event後面沒有下劃線,即寫成了「event」,執行時發現fi是空。參考上面的**「_eventall」,加乙個下劃線嘗試。成功!

記錄,以備後查。

javascript中註冊和移除事件的方式

對於html中的一些元素註冊事件的方式有多種 第一種 測試 第二種 測試 第三種 w3c模型 測試其中addeventlistener 三個引數中,第乙個表示什麼事件型別,注意沒有on,第二個指定方法,第三個是標示是事件冒泡 true 還是事件捕獲 false 涉及到從下到上還是從上到下的事件發生順...

JS中註冊事件與移除事件的三種方式及相容性處理

第一種 所有瀏覽器都支援,但是無法給同乙個物件的同乙個事件註冊多個事件處理函式 註冊事件 btn.onclick function btn.onclick function 移除事件 btn.onclick function 第二種 dom標準中的方法,存在瀏覽器相容性問題,ie9以後支援 註冊事件...

vue的事件註冊 emit

在vue中可以通過事件的註冊,在乙個元件中點選,之後在另外乙個元件中通過相對應的繫結,是另外乙個元件頁面的值進行改變 在vue使用事件註冊的函式是emit eg onincrement increment contations.vue 在此頁面註冊事件 increment 1 增 increment...