WinForms MouseWheel 事件在 F# 中如何工作?

How does the WinForms MouseWheel event work in F#?

我想弄清楚 mouseWheel 事件在 winforms 库中是如何工作的。

尽管在 F#

方面从来没有任何好的例子可以学习

我希望你们中的一个能告诉我。

我在想这样的事情:

 onMouseWheelEvent =
      if MouseWheel event = scroll forward then
        printfn "zooming in"
      else 
        printfn "zooming out"

我知道我发布的是一些愚蠢的代码,但我确实无法在 winforms mousewheelevent 上找到任何东西,除了它存在。它是如何工作的仍然是个谜。

提前致谢。

如果您使用的是 F# 交互式,您可以编写的最简单的代码来测试 MouseWheel 事件的行为方式如下所示:

open System.Windows.Forms

let frm = new Form(Visible=true)
frm.MouseWheel.Add(fun e ->
  printfn "%A" e.Delta
)

当您 select 代码并将其发送到 F# Interactive 时(Alt+Enter 在大多数 F# 编辑器中),你应该看到一个表格出现。然后滚动时,您会看到 Delta 是负数或正数,表示您向上或向下滚动了多少。

如果你想 运行 作为一个独立的应用程序,你需要在别处显示数字(我猜是使用标签)并且你需要将 Application.Run(frm) 添加到应用程序启动结束。

我同意 Anton 的观点,即 WinForms 现在可能不是大多数人用来开发用户界面应用程序的工具,但我认为这不是问题 - 您可以使用 WinForms 构建完美的应用程序并学习 F#。 F# book I wrote some time ago 有一堆 WinForms 示例。

在 f# interactive 中尝试 运行 这个(由 fssnip from Tomas Petricek 上的类似示例提供):

open System.Windows.Forms

// Create form, label and add label to form
let form = new Form(Text = "Scroller Test")
let label = new Label()
form.Controls.Add(label)

// register mousewheel event handler and capture scrolling
form.MouseWheel.Add(fun e -> 
    match e.Delta with
    | n when n > 0 -> label.Text <- "Scrolled up"
    | n when n < 0 -> label.Text <- "Scrolled down"
    | _ -> ()) // making compiler happy even though e.Delta cannot be 0

// Show the form (in F# Interactive)
form.Show()