2010-12-10 17 views
1

F#のDragDropイベントが私の例で正しく動作しない理由を知っていますか? DragEnter、DragLeave、DragOverなどの他のすべてのイベントは、同じ方法で正常に動作しています。F#ドラッグアンドドロップでWinForms:コントロールのDragDropイベントが参照されたメンバ関数を呼び出さない

このコードをコンパイルして試してみてください。ファイルをフォームにドラッグして、実行可能ファイルを起動するコンソール/ターミナルで発生したイベントを確認してください。

open System 
open System.Drawing 
open System.Windows.Forms 

type MainForm(args: string list) as this = 
    // subclassing 
    inherit Form() 

    // controls ------------------- 
    let dragDropImage = new PictureBox() 
    // ---------------------------- 

    // "constructor" (not a real constructor) 
    do this.initComponents() 
    // link events to specific member function 
    do dragDropImage.DragEnter |> Event.add this.onDragEnter 
    do dragDropImage.DragDrop |> Event.add this.onDragDrop 
    // this syntax don't work either: do dragDropImage.DragDrop.Add(fun _ -> printfn "dragDrop") 
    do dragDropImage.DragLeave |> Event.add this.onDragLeave 
    do dragDropImage.DragOver |> Event.add this.onDragOver 

    member this.initComponents() = 
     // main form attributes 
     this.Text <- "Averest-GUI" 
     this.ClientSize <- new Size(350,230) 
     this.StartPosition <- FormStartPosition.CenterScreen 
     // drag'n'drop field 
     dragDropImage.Size <- new Size(330,210) 
     dragDropImage.Location <- new Point(7,7) 
     dragDropImage.AllowDrop <- true // allow Drag'n'Drop functionality 
     // insert controls into MainForm 
     this.Controls.Add(dragDropImage) 

    member this.onDragLeave(e: EventArgs) = 
     printfn "DragLeave" //e.Effect <- DragDropEffects.Copy 

    member this.onDragOver(e: DragEventArgs) = 
     printfn "DragOver" //e.Effect <- DragDropEffects.Copy 

    member this.onDragEnter(e: DragEventArgs) = 
     printfn "DragEnter" //e.Effect <- DragDropEffects.Copy 

    member this.onDragDrop(e: DragEventArgs) = 
     printfn "DragDrop" 


let testForm = 
    let temp = new MainForm(["Test"]) 
    temp 

// single thread apartment model (interacting with COM components) 
[<STAThread>] 
do Application.Run(testForm) 

答えて

3

onDragEnterからコメントを削除します。 e.Effectをe.AllowedEffectsのいずれかに設定しない限り、ドロップは許可されません。カーソルも変更されます。

+0

大変ありがとうございました。 –

関連する問題