Ser*_*amP 3 .net vb.net wpf events types
我正在尝试创建一个Sub,它可以获取一个对象并为其添加一堆事件处理程序,但该对象可以是所有具有这些事件的N种类型中的任何一种.我怎样才能做到这一点?如果我只是将它作为一个Object,如下所示,AddHandler会抱怨Object不存在该事件.
可以这样做吗?
Sub addHandlers(ByVal inputObject as object)
AddHandler inputObject.MouseDown, AddressOf HandleClick
AddHandler inputObject.MouseUp, AddressOf HandleMouseUp
End Sub
Run Code Online (Sandbox Code Playgroud)
编辑:这些对象中的每一个都是一个类的实例,它继承了已经拥有这些事件的不同类(通常是一个控件).
谢谢你的帮助,
山姆.
vcs*_*nes 11
您可能只想创建inputObject一个包含所有这些成员的类型.例如,如果你使用WinForms,它将是Control:
Sub addHandlers(ByVal inputObject As Control)
AddHandler inputObject.MouseDown, AddressOf HandleClick
AddHandler inputObject.MouseUp, AddressOf HandleMouseUp
End Sub
Run Code Online (Sandbox Code Playgroud)
或者如果是WPF,请使用UIElement:
Sub addHandlers(ByVal inputObject As UIElement)
AddHandler inputObject.MouseDown, AddressOf HandleClick
AddHandler inputObject.MouseUp, AddressOf HandleMouseUp
End Sub
Run Code Online (Sandbox Code Playgroud)
现在可以传入任何类型的控件addHandlers.
编辑:
如果所有这些之间没有共同类型,则可以使用反射:
Sub addHandlers(ByVal inputObject As Object)
Dim type = inputObject.GetType()
Dim handleClickDel = New MouseEventHandler(AddressOf HandleClick)
Dim handleUpDel = New MouseEventHandler(AddressOf HandleMouseUp)
type.GetEvent("MouseDown").AddEventHandler(inputObject, handleClickDel)
type.GetEvent("MouseUp").AddEventHandler(inputObject, handleUpDel)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是委托类型仍然必须匹配.不过,这对我来说有点笨拙.如果可能,尝试addHandlers根据需要创建不同的重载,并使用基类型来避免创建其中的许多重载.如果拥有可以传入的类型的代码inputOjbect,请使用接口.
| 归档时间: |
|
| 查看次数: |
4384 次 |
| 最近记录: |