다음을 통해 공유


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 Windows 서버 2012, Windows Server 2008 R2, Windows 7, 8

버전 정보

F# 코어 라이브러리 버전

지원: 2.0, 4.0, 노트북

참고 항목

참조

Control.Event 모듈(F#)

Microsoft.FSharp.Control 네임스페이스(F#)