silverlight – F#:添加和删除事件处理程序

silverlight – F#:添加和删除事件处理程序,第1张

概述我正在尝试添加&从Silverlight FrameworkElement中删除事件处理程序,但我无法正确获取语法. 我想做这样的事情: let clickedEventHandler = fun args -> printfn "Click!"fe.MouseLeftButtonDown.AddHandler( clickedEventHandler)...fe.MouseLeftButt 我正在尝试添加&从Silverlight FrameworkElement中删除事件处理程序,但我无法正确获取语法.

我想做这样的事情:

let clickedEventHandler = fun args -> printfn "Click!"fe.MouseleftbuttonDown.AddHandler( clickedEventHandler)...fe.MouseleftbuttonDown.RemoveHandler(clickedEventHandler)

这样做的正确方法是什么?

解决方法 正如您已经提到的,您需要创建一个委托实例:

let ch = new MousebuttonEventHandler(fun obj args ->  printfn "Click!")

然后你可以使用ch作为AddHandler或RemoveHanlder的参数.原因是,F#函数值实际上并未表示为任何委托类型.它有自己的类型,不是委托(参见another SO discussion).如果查看F#in@R_502_6704@ctive(或VS IntelliSense)中的类型,您可以看到差异:

> (fun (o:obj) (a:MousebuttonEventArgs) -> printfn "Click!") val it : obj -> MousebuttonEventArgs -> unit = (...)> new MousebuttonEventHandler(fun o a -> printfn "Click!") val it : MousebuttonEventHandler = (...)

可能令人困惑的是,F#还允许在调用方法时从lambda函数值隐式转换为兼容的委托类型,但是只有在直接将lambda函数作为参数时才会起作用(我认为):

fe.MouseleftbuttonDown.AddHandler(fun obj args ->     printfn "Click!")

您仍然需要F#中的委托的另一个原因是委托具有明确定义的比较语义(它们与任何其他引用类型进行比较).对于函数,F#规范没有说明它们何时相等.

总结

以上是内存溢出为你收集整理的silverlight – F#:添加和删除事件处理程序全部内容,希望文章能够帮你解决silverlight – F#:添加和删除事件处理程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1004788.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存