将参数传递给RemoveHandler VB.NET

时间:2015-11-26 16:51:45

标签: vb.net

我有3个复选框,我想充当一个径向按钮组,但我的新工作是在vb.net和WinForms。

我希望通过用这样的函数调用替换注释代码来简化3个事件处理程序:

push

但是我没有成功将事件处理程序作为参数传递。我已经尝试将它作为事件处理程序,委托和void传递,但在RemoveHandler / AddressOf调用中使用它似乎没有被编译器理解。

是否有一种方法可以让我从传递的对象中获取事件处理程序?有没有我可以用作参数的类型。显然我并不是绝望,这是以更好的代码而不是更好的功能为名。

1 个答案:

答案 0 :(得分:1)

所以找到一个非常接近的答案,只需要一个小小的调整:

Inspiration

解决方案只是将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