如何判斷某個事件已經繫結了某個事件處理程式?

2021-09-08 08:20:57 字數 1095 閱讀 8367

//為button1繫結乙個事件處理程式

button btn = 

new button();

btn.click += 

neweventhandler(button2_click);

//獲取button類定義的所有事件的資訊

propertyinfo pi = 

( typeof(button)).getproperty(

"events

", bindingflags.instance | 

bindingflags.nonpublic);

//獲取button物件btn的事件處理程式列表

eventhandlerlist ehl = 

(eventhandlerlist)pi.getvalue(btn, 

null);

//獲取control類click事件的字段資訊

fieldinfo fieldinfo = 

( typeof(control)).getfield(

"eventclick

", bindingflags.static | 

bindingflags.nonpublic);

//用獲取的click事件的字段資訊,去匹配btn物件的事件處理程式列表,獲取btn物件click事件的委託物件

//事件使用委託定義的,c#中的委託時多播委託,可以繫結多個事件處理程式,當事件發生時,這些事件處理程式被依次執行

//因此delegate物件,有乙個getinvocationlist方法,用來獲取這個委託已經繫結的所有事件處理程式

delegate 

d = ehl[fieldinfo.getvalue(

null)]; 

foreach (delegate del 

in d.getinvocationlist())

private

void button1_click(

object sender, eventargs e)

private

void button2_click(

object sender, eventargs e)

Spring如何判斷某個類用了某個註解

spring提供了乙個annotationutils類用於判斷某個類是否用了某個註解,以 kafkalistener為例,kafkalistener ann annotationutils.findannotation clazz,kafkalistener.class clazz為使用了該註解的類...

在linux下如何判斷是否已經安裝某個軟體?

我的系統是red hat 我用命令rpm查是否安裝了某個軟體 例如 matlab 與 fluent 得到了如下的結果 我用rpm qa grep matlab 回車後沒有任何顯示 我用rpm qa fluent 回車後沒有任何顯示 我用rpm qa vasp 回車後沒有任何顯示 但實際上肯定是裝了m...

如何判斷某個彈出視窗已經被開啟及重新整理

web開發中,父子視窗的操作很是常用,開啟子視窗的方式有多種,多數情況下這種模式用得比較多,大家也都很熟悉,貌似一種情況相對會用得少點,google出一篇帖子,解決了乙個問題,記之備忘。問題描述 window.open 出來的視窗,如何判斷已經開啟?如果開啟,則將其設定為當前焦點視窗,並過載資料即重...