Udostępnij za pośrednictwem


Event.split < t, "U1," U2,'Del > Funkcja (F#)

Zwraca nowe zdarzenie, które wykrywa zdarzenie oryginalny i wyzwala pierwszego zdarzenia wynikowego, jeśli zwrócona stosowania funkcji argumenty zdarzeń Choice1Of2, a drugie zdarzenie, jeśli zwraca Choice2Of2.

Ścieżka obszaru nazw/modułu: Microsoft.FSharp.Control.Event

Zestaw: FSharp.Core (w FSharp.Core.dll)

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

// Usage:
Event.split splitter sourceEvent

Parametry

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

    Funkcja, zazwyczaj rozpoznawania active deseń, który przekształca wartości zdarzenie w jednym z dwóch typów.

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

    Zdarzenie wejściowe.

Wartość zwracana

Krotka zdarzeń.Pierwszy uruchamiany w każdym przypadku, gdy splitter wynikiem Choice1of1, a drugi uruchamiany, gdy splitter wynikiem Choice2of2.

Uwagi

Ta funkcja o nazwie Split w skompilowane zestawy.Jeżeli języka, niż F# lub przez odbicie, uzyskują dostęp do funkcji, należy użyć tej nazwy.

Przykład

Poniższy kod pokazuje, jak używać Event.split funkcji, aby zaimplementować możliwość przenoszenia formantu w formularzu.splitter Funkcja jest aparat rozpoznawania deseń active (|Down|Up|), która przedstawia stan przycisków myszy.Jeśli użytkownik naciśnie przycisk myszy podczas przesuwania nad przycisk, przenosi przycisk.Jest również kod czasem zmienia kolor przycisku podczas przesuwania, w zależności od tego, który myszy jest używany przycisk.Ten test używa inny kolor dla każdego przycisku myszy.Inne ścieżki zdarzeń, który jest używany, gdy przycisk myszy nie jest wciśnięty, przywraca oryginalny kolor przycisku, po zwolnieniu przycisku.

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)

Platformy

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

Informacje o wersji

F# Core wersji biblioteki

Obsługiwane: 2.0, 4.0, przenośne

Zobacz też

Informacje

Moduł Control.Event (F#)

Obszar nazw Microsoft.FSharp.Control (F#)