2014-01-13 29 views
-1

如何在F#中重寫MouseMove(或者其他任何鼠標事件),類似於C#中的操作?含義我想寫這樣的東西,只是爲了獲得當前的鼠標座標。重寫F#中的MouseMove事件#

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

編輯:基本上我想訪問MouseEventArgs,在這段代碼中,參數e被解釋爲PaintEventArgs。

第二編輯:此代碼實際上工作,只是有另一個代碼塊與OnPaint事件重寫,所以顯然我不能使用相同的事件參數變量(e)在F#中的兩個覆蓋。

回答

2

我認爲你想要的方法叫做OnMouseMove

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

看起來工作一樣是我最初發布時,這樣傳遞的參數e爲解釋爲PaintEventArgs的,所以我沒有得到MouseEventArgs我想,不能訪問當前鼠標座標。 – Jacco

+0

它是'MouseEventArgs',請參閱編輯的代碼。 –

+0

好了,問題解決了,這個代碼正好在OnPaint事件的重寫下,所以我想我從那個重寫語句中得到了e參數(這真的很奇怪)。至少現在它已經可以工作了,謝謝。 – Jacco

4

作爲在派生類中重寫虛方法的替代方法,可以使用F#對象表達式來實現相同的結果。這對創建重寫行爲的實例而不需要定義派生類很有用。

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