註冊事件,反註冊事件,匿名事件

2021-06-16 07:26:11 字數 1758 閱讀 7640

根據資料動態建立控制項及為控制項動態繫結事件(事件不只乙個,包括匿名方法).

現在要訂閱乙個新事件同時取消這個控制項的所有事件.

改用反射實現,用反射獲得button的eventhandler,並對它進行反註冊。

方法一。

propertyinfo propertyinfo =

typeof

(button).getproperty(

"events",

bindingflags.instance

|bindingflags.nonpublic);

system.componentmodel.eventhandlerlist eventhandlerlist

=(system.componentmodel.eventhandlerlist)propertyinfo.getvalue(btntmp,

null);

fieldinfo fieldinfo=(

typeof

(control)).getfield(

"eventclick

",bindingflags.nonpublic

|bindingflags.static);

delegate d

=eventhandlerlist[fieldinfo.getvalue(

null

)];

if(d

!=null)

} 方法二。

一般來說,對於要取消訂閱的事件,不要使用匿名**。

使用匿名委託訂閱事件,取消訂閱比較麻煩。 

可以這樣實現,把委託或匿名方法儲存在乙個變數中。

訂閱及取消時使用這個變數就可以了。

private void testbutton_click(object sender, routedeventargs e)

private routedeventhandler rehandler = null;

private void addeventbutton_click(object sender, routedeventargs e)

;//rehandler = delegate(object senderr, routedeventargs ee) ;

btn1.click += rehandler;

}private void removeeventbutton_click(object sender, routedeventargs e)

例如:private notifycollectionchangedeventhandler collectionchangedhandler = null;

foreach (carrierposition item in realtimemonitorfortrac.tracks)

_addlinetonewmap(item);

trackcarriers++;

}private void _addlinetonewmap(carrierposition item)

else //新增

collectionchangedhandler = (o, ox) =>

;//註冊事件

item.trackpoints.collectionchanged += collectionchangedhandler;

line.isfitview = true;

_tracklines.add(line.identity, line);

}catch (exception ex)

JS註冊事件

使用onload事件往往在body標籤上註冊,使用 nl ad function name 的方式 不過這種方式只能在ie上使用,若是再ff上,就失去了效果,導致頁面會有錯誤 解決這個問題可使用以下方法 if window.addeventlistener else if window.attach...

FLEX事件註冊

import mx.controls.alert import flash.events.mouseevent button 事件註冊 bt1.addeventlistener mouseevent.click,onc bt1.addeventlistener mouseevent.mouse mo...

匿名委託 為事件 event 註冊匿名委託

create a handler for a click event.button1.click delegate system.object o,system.eventargs e 註冊方法注意事項 1.操作符後 無 new 關鍵字 2.如需要 為 click 註冊匿名委託,則在 click 上...