Freigeben über


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

Gibt ein neues Ereignis zurück, das auf das ursprüngliche Ereignis lauscht und das erste resultierende Ereignis auslöst, wenn die Anwendung der Funktion auf die Ereignisargumente Choice1Of2 zurückgegeben hat, und das zweite Ereignis auslöst, wenn Choice2Of2 zurückgegeben wird.

Namespace/Modulpfad: 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

Parameter

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

    Eine Funktion, in der Regel eine Erkennung aktiver Muster, mit der Ereigniswerte in einen von zwei Typen transformiert werden.

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

    Das Eingabeereignis.

Rückgabewert

Ein Tupel von Ereignissen.Das erste Ereignis wird immer ausgelöst, wenn splitter als Choice1of1 ausgewertet wird, und das Zweite wird ausgelöst, wenn splitter Choice2of2 ergibt.

Hinweise

Der Name dieser Funktion in kompilierten Assemblys lautet Split.Verwenden Sie diesen Namen, wenn Sie in einer anderen .NET-Sprache als F# oder durch Reflektion auf die Funktion zugreifen.

Beispiel

Im folgenden Code wird veranschaulicht, wie mit der Event.split-Funktion die Möglichkeit zum Verschieben eines Steuerelements in einem Formular implementiert wird.Die splitter-Funktion ist eine Erkennung aktiver Muster (|Down|Up|), die den Zustand der Maustasten darstellt.Drückt ein Benutzer die Maustaste, während die Mause über der Schaltfläche bewegt wird, wird die Schaltfläche verschoben.Es gibt zudem Code, der gelegentlich die Farbe der Schaltfläche ändert, während sie verschoben wird, je nachdem, welche Maustaste verwendet wird.Dieser Test verwendet eine andere Farbe für jede Maustaste.Der andere Ereignispfad, der bei gedrückter Maustaste verwendet wird, stellt die ursprüngliche Farbe der Schaltfläche wieder her, nachdem die Taste wieder losgelassen wird.

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)

Plattformen

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

Versionsinformationen

F#-Kern-Bibliotheks-Versionen

Unterstützt in: 2,0, 4,0, portablen

Siehe auch

Referenz

Control.Event-Modul (F#)

Microsoft.FSharp.Control-Namespace (F#)