close

在 WinForm 裡的控制項,設計了許多不同的 Event,當專案愈大愈複雜,到底有哪些函式被設進 Event 裡,常常令人摸不清。一開始,試著利用 EventInfo 來得到想要的資訊,不過後來得知 EventInfo 缺乏這方面的資訊。後來找到了一篇對岸寫的文章,雖然解決了問題,不過方法可以說是一種 Hack…

以下的程式碼是參考自 C#中删除任意控件任意事件的事件列表的实现! ,至於這作者怎麼發現這方法的,我無從得知,只能說真的是太神奇了。

2014-08-08_161547

 

而上述程式碼的意思大概是,將 Events 這個 property 裡的值取出並轉型為 EventHandlerList。之後將 event name 的開頭加上 “Event” 字串,以此尋找對應的 field,把將 field 的值做為 key,丟進 EventHandlerList 物件找出 delegate 物件。

最後,再從 delegate 找出一群 delegate 物件(啥?!),這群 delegate 物件就是我們要的東西。這段邏輯說真的不太好懂,不過我想,有解決到問題就好…

另外,這是呼叫的方式:

2014-08-08_161606

 

範例程式

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 卑微研究生 的頭像
    卑微研究生

    卑微研究生的部落格

    卑微研究生 發表在 痞客邦 留言(0) 人氣()