Compartir a través de


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

Vea también

Referencia

Control.Event (Módulo de F#)

Microsoft.FSharp.Control (Espacio de nombres de F#)