Share via


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

Restituisce un nuovo evento che ascolta l'evento originale e attiva il prima evento risultante se l'applicazione della funzione agli argomenti dell'evento ha restituito un valore Choice1Of2 e il secondo evento se restituisce un valore Choice2Of2.

Percorso spazio dei nomi/modulo: 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

Parametri

  • splitter
    Tipo: 'T -> Choice<'U1,'U2>

    Funzione che trasforma i valori di evento in uno dei due tipi (in genere si tratta di un riconoscimento attivo del modello).

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

    Evento di input.

Valore restituito

Tupla di eventi. La prima viene generata ogni volta che splitter restituisce Choice1of1, la seconda ogni volta che splitter restituisce Choice2of2.

Note

Questa funzione è denominata Split negli assembly compilati. Utilizzare questo nome se si accede alla funzione da un linguaggio diverso da F# o tramite reflection.

Esempio

Nel codice riportato di seguito viene mostrato come utilizzare la funzione Event.split per implementare la possibilità di spostamento di un controllo su un form. La funzione splitter è il riconoscimento attivo del modello (|Down|Up|), che rappresenta lo stato dei pulsanti del mouse. Se un utente preme il pulsante del mouse mentre muove il mouse quando si trova al di sopra del pulsante, il pulsante si muove È inoltre disponibile codice che talvolta modifica il colore del pulsante mentre è in movimento, a seconda del pulsante del mouse utilizzato. In questo test viene utilizzato un colore diverso per ogni pulsante del mouse. L'altro percorso di evento che viene utilizzato quando il pulsante del mouse non è premuto, ripristina il colore originale del pulsante dopo che il pulsante viene rilasciato.

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)

Piattaforme

Windows 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2.

Informazioni sulla versione

F# Runtime

Supportato in: 2.0, 4.0

Silverlight

Supportato in: 3

Vedere anche

Riferimenti

Modulo Control.Event (F#)

Spazio dei nomi Microsoft.FSharp.Control (F#)

Cronologia delle modifiche

Data

Cronologia

Motivo

Settembre 2010

Aggiunto esempio di codice.

Miglioramento delle informazioni.