獲取控制項例項的當前事件處理函式控制代碼

2021-04-09 08:42:39 字數 1902 閱讀 9850

突然想設計乙個能在runtime時,改變控制項大小和位置的功能,而且要求盡量純.net而不用win32的鉤子。最重要的是對一般的介面設計透明,不要過多地影響普通介面設計的過程。  初步想法是,用乙個類來處理乙個control,在變成設計態時,先儲存現在的mouse和key的處理函式,並取消他們,然後用我們自己的mouse和key控制代碼替代原來的訊息處理。在退出設計態時再恢復原來訊息處理函式。

取消和新增訊息處理有addhandler 和 removehandler ,但找了半天沒有發現能獲取當前控制項訊息函式的功能,於是google了半天,東拼西湊了一些資料得到了下面的**。如哪位有更好的辦法,還請不吝賜教 

public

function geteventsubscribers()

function

geteventsubscribers(

byval

target 

asobject

, byval

eventname 

asstring

) as

[delegate

]()dim

winformseventname 

asstring=(

"event"&

eventname)

dimt 

astype 

=target.gettype

dodim

fia 

asfieldinfo() 

=t.getfields((bindingflags.nonpublic 

or(bindingflags.static 

orbindingflags.instance)))

dimfi 

asfieldinfo

foreach

fi in

fiadim

d as

[delegate]'

debug.writeline(fi.name)

if(fi.name 

=eventname) 

thend =

ctype

(fi.getvalue(target), [

delegate

])if

(not

d is

nothing

) then

return

d.getinvocationlist

endif

endif

if(fi.name 

=winformseventname) 

then

dimehl 

aseventhandlerlist 

=directcast

(target.gettype.getproperty(

"events

", (bindingflags.flattenhierarchy 

or(bindingflags.nonpublic 

orbindingflags.instance))).getvalue(target, 

nothing

), eventhandlerlist)d =

ehl.item(fi.getvalue(target))if(

notd 

isnothing

) then

return

d.getinvocationlist

endif

endif

nextt =

t.basetype

loop

while

(not

t is

nothing

)return

new[

delegate](0

-1

) {}

end function

獲取當前事件源DOM元素

今天用vue3寫程式時遇到了乙個問題,原 如下 顯示 預期的結果是列印出togglecodebutton這個dom元素,但是結果返回的是null,後來發現了問題所在 我雖然log是在掛載完成後,但是獲取dom卻是在掛載之前,當然不會有結果,只要將獲取dom元素也放到onmounted 鉤子中即可。即...

獲取TabControl控制項的當前選項卡

tabcontrol控制項是乙個選項卡控制項,在c 的winform程式中會經常用到。在開發中,有時,需要根據使用者選擇的選項卡不同,而執行不同的操作,這時,我們就會想 怎樣判斷,使用者當前選擇的是哪個選項卡?解決方案 使用tabcontrol控制項的selectedtab屬性。可以做乙個小實驗。1...

c 獲取當前方法事件對應的控制項

例如,combobox1對應的事件selectionchangecommitted private void combobox1 selectionchangecommitted object sender,eventargs e 可以通過selectionchangecommitted事件中傳遞過...