savez-vous pourquoi l'événement DragDrop dans F # ne fonctionne pas correctement dans mon exemple? Tous les autres événements comme DragEnter, DragLeave, DragOver, ... fonctionnent bien de la même manière. Il suffit de compiler ce code et de l'essayer, de faire glisser un fichier dans le formulaire et de voir les événements déclenchés dans la console/le terminal à partir de l'endroit où vous avez démarré l'exécutable.F # Glisser-déposer à l'aide de WinForms: l'événement DragDrop d'un contrôle n'appelle pas la fonction membre référencée
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)
merci beaucoup, cela a fonctionné parfaitement! –