Partager via


Event.split<'T,'U1,'U2,'Del>, fonction (F#)

Retourne un nouvel événement qui écoute l'événement d'origine et déclenche le premier événement qui en résulte si l'application de la fonction aux arguments d'événement a retourné une valeur Choice1Of2, et le deuxième événement si elle a retourné la valeur Choice2Of2.

Espace de noms/Chemin du module : Microsoft.FSharp.Control.Event

Assembly : FSharp.Core (in FSharp.Core.dll)

// Signature:
Event.split : ('T -> Choice<'U1,'U2>) -> IEvent<'Del,'T> -> IEvent<'U1> * IEvent<'U2> (requires delegate)

// Usage:
Event.split splitter sourceEvent

Paramètres

  • splitter
    Type : 'T ->Choix<'U1,'U2>

    Une fonction, en général un module de reconnaissance de modèle actif, qui transforme des valeurs d'événement dans l'un des deux types.

  • sourceEvent
    Type : IEvent<'Del,'T>

    Événement d'entrée.

Valeur de retour

Tuple d'événements.Le premier se déclenche lorsque splitter a la valeur Choice1of1 et le second se déclenche lorsque splitter a la valeur Choice2of2.

Notes

Cette fonction se nomme Split dans les assemblys compilés.Si vous accédez à la fonction à partir d'un langage autre que F# ou par réflexion, utilisez ce nom.

Exemple

Le code suivant montre comment utiliser la fonction Event.split pour implémenter la possibilité de déplacer un contrôle sur un formulaire.La fonction splitter est le module de reconnaissance de modèle actif (|Down|Up|), qui représente l'état des boutons de la souris.Si un utilisateur appuie sur le bouton de la souris tandis qu'il déplace la souris au-dessus du bouton, ce dernier se déplace.Il existe également du code qui modifie parfois la couleur du bouton pendant qu'il se déplace, en fonction du bouton de souris qui est utilisé.Ce test utilise une couleur différente pour chaque bouton de souris.L'autre chemin d'accès de l'événement, utilisé lorsque le bouton de la souris n'est pas vers le bas, restaure la couleur d'origine du bouton après que le bouton ai été libéré.

open System.Windows.Forms
open System.Drawing
open Microsoft.FSharp.Core

let form = new Form(Text = "F# Windows Form",
                    Visible = true,
                    TopMost = true)

let button = new Button(Text = "Button",
                        Visible = true,
                        Left = 100,
                        Width = 50,
                        Top = 100,
                        Height = 20)

form.Controls.Add(button)
let originalColor = button.BackColor
let mutable xOff, yOff = (0, 0)

let (|Down|Up|) (evArgs:MouseEventArgs) =
    match evArgs.Button with
    | MouseButtons.Left 
    | MouseButtons.Right 
    | MouseButtons.Middle -> Down(evArgs)
    | _ -> Up

button.MouseDown 
|> Event.add(fun evArgs ->
    xOff <- evArgs.X
    yOff <- evArgs.Y)

form.MouseMove
|> Event.map (fun evArgs -> (evArgs.X, evArgs.Y))
|> Event.add (fun (x, y) -> form.Text <- sprintf "(%d, %d)" x y)

let (dragButton, noDragButton) = Event.split (|Down|Up|) button.MouseMove

// Move the button, and change its color if the user uses the
// right or middle mouse button.
dragButton |> Event.add ( fun evArgs ->
    match evArgs.Button with
    | MouseButtons.Left ->
        button.BackColor <- originalColor
    | MouseButtons.Right ->
        button.BackColor <- Color.Red
    | MouseButtons.Middle ->
        button.BackColor <- Color.Blue
    | _ -> ()
    button.Left <- button.Left + evArgs.X - xOff
    button.Top <- button.Top + evArgs.Y - yOff
    button.Refresh())

// Restore the button's original color when the mouse is moved after
// the release of the button.
noDragButton |> Event.add ( fun () -> 
    button.BackColor <- originalColor)

Plateformes

Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Informations de version

Versions de bibliothèque principale F#

Prise en charge dans : 2,0, 4,0, portables

Voir aussi

Référence

Control.Event, module (F#)

Microsoft.FSharp.Control, espace de noms (F#)