覆盖F#中的MouseMove事件

时间:2014-01-13 17:06:28

标签: f# c#-to-f#

如何在F#中覆盖MouseMove(或任何鼠标事件),类似于在C#中完成的操作?意思是我想写这样的东西,只是为了得到当前的鼠标坐标。

override form.MouseMove e = 
    mouseX = e.X
    mouseY = e.Y

编辑:基本上我想访问MouseEventArgs,在这段代码中,参数e被解释为PaintEventArgs。

第二次编辑:这段代码实际上有效,只是在OnPaint事件上有另一个带有覆盖的代码块,所以显然我不能对F#中的两个覆盖使用相同的事件参数变量(e)。

2 个答案:

答案 0 :(得分:4)

作为替代派生类中的虚方法的替代方法,可以使用F#对象表达式来实现相同的结果。这对于创建重写行为的实例非常有用,无需定义派生类。

let mutable mouseLoc = Point()
let myForm = {
    new Form() with
        override __.OnMouseMove args =
            mouseLoc <- args.Location }

答案 1 :(得分:2)

我认为您想要的方法称为OnMouseMove

type MyForm() =
    inherit Form()
    override this.OnMouseMove(e) = printfn "Mouse is at %d %d" e.X e.Y