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