有時候遇到動態掛接事件的時候,可能想刪除以前掛接的事件。因為如果不刪除,事件是會重複掛接的。
這裡給出兩種實現方法,各有優缺點。
1。利用反射機制實現
void clearevent(control control, string eventname)
很簡單,就兩行**,但是以後自己新增事件就用這個方法,以便於以後刪除。如果不採用這個方法新增的事件,是不會被刪除的。
還要寫乙個刪除事件的方法:
void clearevent(control control)
以後要清除事件的時候,就用這個方法即可。
當然這個方法有個問題就是如何不用反射機制實現任意方法的事件的新增和刪除。
其實也沒什麼困難的,寫幾個case語句就能解決問題,雖然事件很多,但是copy一下即可,也不算費事。
而且你也可以只寫你關心的那幾個事件。所以這個對工程不會造成什麼影響。
最後總結:
綜合上述兩種方法,設計乙個類,來負責處理此類事情,以便以後需要呼叫。
class myeventmanager:idisposable
eventlist.addhandler(eventobject, eventhandler);
}public void delevent(control control, string eventname)
eventlist.removehandler(eventobject, d);
eventobjectlist.remove(eventobject);
}public static void clearevent(control control, string eventname)
#endregion
}
C 中動態訂閱控制項中任意事件的方法
這個題目想了半天,不太好用一句話描述。這樣,舉個簡單的應用場景 在用windows forms製作嚮導程式的時候,通常會有 上一步 下一步 這樣的按鈕。假設現在需要做乙個通用的 嚮導製作框架 那麼我們就需要在這個 嚮導製作框架 中,對 上一步 下一步 這些按鈕是否可用 是否enabled 進行控制。...
C 中刪除控制項的事件的方法類
方法一 刪除指定控制項的指定事件 public void clearevent system.windows.forms.control control,string eventname 呼叫 clearevent button1,click 就會清除button1物件的click事件的所有掛接事件...
堆中刪除任意元素
演算法導論6.5 8 def heapdelete a,i a i a 1 a 1 a i a.pop maxheap a,i 上面這個演算法是錯誤的,因為沒有考慮如果替換元素比被替換元素的值更大,那麼有可能i的父節點也不能保持最大堆性質的情況。如圖,要刪除1,用6替換1,3不再保持最大堆性質。10...