【发布时间】:2015-11-26 16:51:44
【问题描述】:
我有 3 个复选框,我想用作一个单选按钮组,但我的新工作是在 vb.net 和 WinForms 中。
我希望通过用这样的函数调用替换注释代码来简化 3 个事件处理程序:
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
但我没有成功将事件处理程序作为参数传递。我尝试将它作为事件处理程序、委托和 void 传递,但编译器似乎无法理解在 RemoveHandler/AddressOf 调用中使用它。
有没有一种方法可以让我从传递的对象中获取事件处理程序?有没有可以用作参数的类型。显然我并不绝望,这是以更好的代码而不是更好的功能为名。
【问题讨论】:
标签: vb.net