gpt4 book ai didi

.net - VB.Net - 将处理程序添加到未知类型的对象?

转载 作者:行者123 更新时间:2023-12-01 07:43:19 26 4
gpt4 key购买 nike

我正在尝试创建一个可以获取对象并为其添加大量事件处理程序的 Sub,但该对象可以是所有具有这些事件的 N 类型中的任何一种。我怎样才能做到这一点?如果我只是将它作为一个对象,如下所示 AddHandler 提示该事件对于对象不存在。

这可以做到吗?

Sub addHandlers(ByVal inputObject as object)
AddHandler inputObject.MouseDown, AddressOf HandleClick
AddHandler inputObject.MouseUp, AddressOf HandleMouseUp
End Sub

编辑:这些对象中的每一个都是一个类的实例,该类继承了已经具有这些事件的不同类(通常是控件)。

谢谢你的帮助,
山姆。

最佳答案

您可能只想制作 inputObject具有所有这些成员的类型。例如,如果您使用 WinForms,它将是 Control:

Sub addHandlers(ByVal inputObject As Control)
AddHandler inputObject.MouseDown, AddressOf HandleClick
AddHandler inputObject.MouseUp, AddressOf HandleMouseUp
End Sub

或者如果是 WPF,请使用 UIElement :
Sub addHandlers(ByVal inputObject As UIElement)
AddHandler inputObject.MouseDown, AddressOf HandleClick
AddHandler inputObject.MouseUp, AddressOf HandleMouseUp
End Sub

现在任何该类型的控件都可以传递到 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

委托(delegate)类型仍然必须匹配。不过,这对我来说有点笨拙。如果可能,尝试为 addHandlers 创建不同的重载根据需要,并使用基本类型来避免创建其中的许多。如果拥有可以作为 inputOjbect 传入的类型的代码,使用接口(interface)。

关于.net - VB.Net - 将处理程序添加到未知类型的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com