Поделиться через


Функция Event.split<'T,'U1,'U2,'Del> (F#)

Возвращает новое событие, ожидающее первоначальное событие и вызывающее первое результирующее событие, если применение функции к аргументам события возвращает значение Choice1Of2, и второе событие, если возвращается значение Choice2Of2.

Пространство имен/путь к модулю: Microsoft.FSharp.Control.Event

Сборка: FSharp.Core (в FSharp.Core.dll)

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

// Usage:
Event.split splitter sourceEvent

Параметры

  • splitter
    Тип: 'T ->Choice<'U1,'U2>

    Функция, обычно активный распознаватель шаблонов, которая преобразовывает значения событий в один из двух типов.

  • sourceEvent
    Тип: IEvent<'Del,'T>

    Входное событие.

Возвращаемое значение

Кортеж событий.Первое событие активируется, когда функция splitter возвращает значение Choice1of1, а второе событие — при возврате функцией splitter значения Choice2of2.

Заметки

В скомпилированных сборках имя этой функции — Split.При обращении к функции из языка, отличного от F#, или посредством отражения следует использовать это имя.

Пример

В следующем коде показано, как использовать функцию Event.split для реализации возможность перемещать элемент управления в форме.Функция splitter является активным распознавателем шаблонов (|Down|Up|), который представляет состояние кнопок мыши.Если пользователь нажимает кнопку мыши при перемещении указателя мыши, когда он находится на кнопке, кнопка перемещается.Есть также код, который иногда изменяет цвет кнопки при перемещении в зависимости от используемой кнопки мыши.В этом тесте для каждой кнопки мыши используется свой цвет.Другой путь событий, который используется, когда кнопка мыши не нажата, восстанавливает исходный цвет кнопки после того, как кнопка отпущена.

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)

Платформы

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

Сведения о версии

Основной версии библиотеки F#

Поддерживается в: 2.0, 4.0, портативное

См. также

Ссылки

Модуль Control.Event (F#)

Пространство имен Microsoft.FSharp.Control (F#)