VB.NET代码是:
AddHandler TheGrp.DataChanged, AddressOf theGrp_DataChange
那我怎么能用F#做什么?
theGrp.DataChanged.AddHandler(X.theGrp_DataChange)
错误1此函数需要太多参数,或者在不期望函数的上下文中使用
答案 0 :(得分:2)
试试theGrp.DataChanged.AddHandler(fun o e -> X.theGrp_DataChange(o, e))
。 AddHandler
的签名表示它需要一个委托,因此您可以显式创建一个(通过类似DataChangedEventHandler(fun o e -> X.theGrp_DataChange(o, e))
之类的东西),也可以让编译器在给定函数定义时隐式添加委托构造函数,但是你不能只使用这个方法本身。
答案 1 :(得分:2)
或者,如果您不想显式创建lambda表达式,也可以编写(在这种情况下,函数签名与委托所需的签名匹配,因此它应该起作用):
theGrp.DataChanged.AddHandler(DataChangedEventHandler(x.theGrp_DataChanged))
此外,如果您不需要 sender 参数,则可以声明theGrp_DataChanged
方法仅采用 event args 参数,然后再编写:
theGrp.DataChanged.Add(x.theGrp_DataChanged)