16,555
社区成员
发帖
与我相关
我的任务
分享
Sub Combin()
AddHandler BTN.Click,Sub() Test(DDL,SSP)
end Sub
Sub UnCombine()
RemoveHandler BTN.Click,Sub() Test(DDL,SSP)
End Sub
Dim _PropertyInfo As PropertyInfo = GetType(Checkbox).GetProperty("Events", BindingFlags.Instance Or BindingFlags.NonPublic)
If _PropertyInfo Is Nothing Then Exit Sub
Dim _EventList As EventHandlerList = CType(_PropertyInfo.GetValue(Checkbox1, Nothing), EventHandlerList)
If _EventList Is Nothing Then Exit Sub
Dim _List As EventHandlerList = DirectCast(_EventList, EventHandlerList)
Dim _FieldInfo As FieldInfo = (GetType(Control)).GetField("EventCheckedChanged", BindingFlags.Static Or BindingFlags.NonPublic)
If _FieldInfo Is Nothing Then Exit Sub
Dim _ObjectDelegate As [Delegate] = _List(_FieldInfo.GetValue(Checkbox1))
If _ObjectDelegate Is Nothing Then Exit Sub
For Each eh As [Delegate] In _ObjectDelegate.GetInvocationList()
RemoveHandler Checkbox1.CheckedChanged, eh
Next
End Sub
这是我目前测试的代码
Dim _PropertyInfo As PropertyInfo = GetType(Button).GetProperty("Events", BindingFlags.Instance Or BindingFlags.NonPublic)
If _PropertyInfo Is Nothing Then Exit Sub
Dim _EventList As EventHandlerList = CType(_PropertyInfo.GetValue(Checkbox1, Nothing), EventHandlerList)
If _EventList Is Nothing Then Exit Sub
Dim _List As EventHandlerList = DirectCast(_EventList, EventHandlerList)
Dim _FieldInfo As FieldInfo = (GetType(Control)).GetField("EventCheckedChanged", BindingFlags.Static Or BindingFlags.NonPublic)
If _FieldInfo Is Nothing Then Exit Sub
Dim _ObjectDelegate As [Delegate] = _List(_FieldInfo.GetValue(Checkbox1))
If _ObjectDelegate Is Nothing Then Exit Sub
For Each eh As [Delegate] In _ObjectDelegate.GetInvocationList()
RemoveHandler Checkbox1.CheckedChanged, eh
Next
End Sub
好像这样还不可以 我做测试后 还是解除不掉Checkbox对应地方法
请问一下 这个部份的代码 到底还要改哪些参数呢?
sub 绑定()
AddHandler BTN.Click,Addressof Test_lambda
end sub
sub 解除()
RemoveHandler BTN.Click,Addressof Test_lambda
end sub
Sub Test_lambda()
Test(DDL,SSP)
end sub
测试结果是 我绑定后 然后再呼叫了解除的副程式
它还是一样 没有移除掉我按下BTN 后会呼叫的Test(DDL,SSP)
这边当我写了RemoveHandler BTN.Click,Addressof Test_lambda 的代码后
编译器出现了些警告讯习
Addressof' 运算式在此内容中没有作用, 因为Addressof 的方法引数必须以宽松的方式转换成事件的委派型别,
请将'Addressof' 的运算式指派给变数,然后用该变数来加入或移除作为处理常式的方法Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
AddHandler Button3.Click, AddressOf MyButtonClick
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
RemoveHandler Button3.Click, AddressOf MyButtonClick
End Sub
Private Sub MyButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
MessageBox.Show("test")
End Sub
End Class
是可以移除的Imports System.Reflection
Imports System.ComponentModel
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
AddHandler Button3.Click, Sub() MessageBox.Show("test")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim _PropertyInfo As PropertyInfo = GetType(Button).GetProperty("Events", BindingFlags.Instance Or BindingFlags.NonPublic)
If _PropertyInfo Is Nothing Then Exit Sub
Dim _EventList As EventHandlerList = CType(_PropertyInfo.GetValue(Button3, Nothing), EventHandlerList)
If _EventList Is Nothing Then Exit Sub
Dim _List As EventHandlerList = DirectCast(_EventList, EventHandlerList)
Dim _FieldInfo As FieldInfo = (GetType(Control)).GetField("EventClick", BindingFlags.Static Or BindingFlags.NonPublic)
If _FieldInfo Is Nothing Then Exit Sub
Dim _ObjectDelegate As [Delegate] = _List(_FieldInfo.GetValue(Button3))
If _ObjectDelegate Is Nothing Then Exit Sub
For Each eh As [Delegate] In _ObjectDelegate.GetInvocationList()
RemoveHandler Button3.Click, eh
Next
End Sub
End Class
AddHandler BTN.Click,addressof Test
RemoveHandler BTN.Click,addressof Test