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)
大変ありがとうございました。 –