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, 노트북