【问题标题】:How does the WinForms MouseWheel event work in F#?WinForms MouseWheel 事件如何在 F# 中工作?
【发布时间】:2017-01-17 16:31:11
【问题描述】:

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

虽然在F#方面没有任何好的例子可以学习

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

我在想这样的事情:

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

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

提前致谢。

【问题讨论】:

  • 使用您为其他语言找到的相同示例。语法可能略有不同,但它仍然是相同的 .NET Framework。相同的事件处理程序适用于所有语言。
  • "我在 winforms mousewheelevent 上找不到除了它存在的任何东西。它是如何工作的仍然是个谜。" 像往常一样,the documentation 是一个很好的起点...
  • 我会挑战这样的假设:winforms 是学习 F#(或任何其他新语言,就此而言)特别好的游乐场。为了学习 F#,我将专注于核心概念,如函数、数据结构、不变性、F# 库函数。您最近在其他问题中发布的代码中的代码质量还有很大的提升空间。

标签: winforms f# mousewheel


【解决方案1】:

尝试在 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()

【讨论】:

    【解决方案2】:

    如果您使用 F# 交互式,您可以编写来测试 MouseWheel 事件的行为方式的最简单的东西是这样的:

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

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

    如果你想将它作为一个独立的应用程序运行,你需要在其他地方显示数字(我猜是使用标签),你需要在末尾添加Application.Run(frm) 来启动应用程序。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2018-09-21
      • 1970-01-01
      相关资源
      最近更新 更多