突然想設計乙個能在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事件中傳遞過...