Event.split<'T,'U1,'U2,'Del> (Función de F#)
Devuelve un nuevo evento que escucha el evento original y desencadena el primer evento resultante si la aplicación de la función a los argumentos del evento devolvió Choice1Of2, y desencadena el segundo evento si devolvió Choice2Of2.
Espacio de nombres/Ruta de acceso del módulo: Microsoft.FSharp.Control.Event
Ensamblado: FSharp.Core (en FSharp.Core.dll)
// Signature:
Event.split : ('T -> Choice<'U1,'U2>) -> IEvent<'Del,'T> -> IEvent<'U1> * IEvent<'U2> (requires delegate)
// Usage:
Event.split splitter sourceEvent
Parámetros
splitter
Tipo: 'T ->Choice<'U1,'U2>Una función, normalmente un reconocedor del modelo activo, que transforma los valores de evento en uno de dos tipos posibles.
sourceEvent
Tipo: IEvent<'Del,'T>Evento de entrada.
Valor devuelto
Tupla de eventos.El primer evento se desencadena cuando splitter se evalúa como Choice1of1 y el segundo se desencadena cuando splitter se evalúa como Choice2of2.
Comentarios
Esta función se denomina Split en los ensamblados compilados.Si obtiene acceso a la función desde un lenguaje distinto de F# o mediante reflexión, use este nombre.
Ejemplo
En el código siguiente se muestra cómo usar la función Event.split para implementar la capacidad de mover un control en un formulario.La función splitter es el reconocedor del modelo activo (|Down|Up|), que representa el estado de los botones del mouse.Si un usuario presiona el botón del mouse mientras mueve el mouse cuanto está sobre el botón, este se mueve.También existe código que a veces cambia el color del botón mientras se mueve, dependiendo del botón del mouse que se use.Esta prueba usa un color distinto para cada botón del mouse.La ruta de acceso de evento alternativa, que se usa cuando el botón del mouse no está presionado, restaura el color original del botón después de liberarlo.
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)
Plataformas
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Información de versiones
Versiones de la biblioteca básica de F#
Se admite en: 2.0, 4.0, portables