我有3个复选框,我想充当一个径向按钮组,但我的新工作是在vb.net和WinForms。
我希望通过用这样的函数调用替换注释代码来简化3个事件处理程序:
push
但是我没有成功将事件处理程序作为参数传递。我已经尝试将它作为事件处理程序,委托和void传递,但在RemoveHandler / AddressOf调用中使用它似乎没有被编译器理解。
是否有一种方法可以让我从传递的对象中获取事件处理程序?有没有我可以用作参数的类型。显然我并不是绝望,这是以更好的代码而不是更好的功能为名。
答案 0 :(得分:1)
所以找到一个非常接近的答案,只需要一个小小的调整:
解决方案只是将Private Sub cbLinqQuery_CheckedChanged(sender As Object, e As EventArgs) handles cbLinqQuery.CheckedChanged
SafeCheckChg(cbDataTable, cbDataTable_CheckedChanged, cbLinqQuery.Checked)
'RemoveHandler cbDataTable.CheckedChanged, AddressOf cbDataTable_CheckedChanged
'cbDataTable.Checked = Not cbLinqQuery.Checked
'AddHandler cbDataTable.CheckedChanged, AddressOf cbDataTable_CheckedChanged
RemoveHandler cbArray.CheckedChanged, AddressOf cbArray_CheckedChanged
cbArray.Checked = Not cbLinqQuery.Checked
AddHandler cbArray.CheckedChanged, AddressOf cbArray_CheckedChanged
btnDefaultBoundData_Click(sender, e)
End Sub
Private Sub SafeCheckChg(ByRef cb As CheckBox, ByRef handler As EventHandler, checked As Boolean)
RemoveHandler cb.CheckedChanged, AddressOf handler
cb.Checked = Not checked
AddHandler cb.CheckedChanged, AddressOf handler.Clone
End Sub
foo作为参数传递,并从RemoveHandler / AddHandler调用中删除AddressOf。 (出于某种原因,我认为这是Add / RemoveHandler调用的必需部分,而不是对参数进行单独的函数调用。)
最终守则:
AddressOf