我有一个类型
type figure =
{
what : int;
position : Point;
size : Point;
}
我希望我的函数返回这个类型,但是因为它是一个事件,它想要返回一个单元() 我怎样才能让我的函数返回这个类型而不是单位?
let checkInput =
drawArea.MouseClick.Add(fun args ->
if args.Button = MouseButtons.Left then
new figure { what = 0; position = new Point(args.X, args.Y); size = new Point(50, 50) })
对此有任何帮助将不胜感激
答案 0 :(得分:1)
在您的示例中,编译器不知道如何处理您创建的新图形。图需要存储在某处或传递给函数。这是一个传递给函数的例子。当您在表单中单击时,标题将更新为单击的位置。
open System.Drawing
open System.Windows.Forms
type Figure = {
what : int;
position : Point;
size : Point;
}
let drawArea = new Form()
let print figure =
drawArea.Text <- figure.position.ToString()
drawArea.MouseClick.Add(fun args ->
if args.Button = MouseButtons.Left then
print { what = 0; position = Point(args.X, args.Y); size = Point(50) }
)
Application.Run(drawArea)
对于此示例,您需要在项目的引用下包含这两个程序集。
System.Drawing
System.Windows.Forms
答案 1 :(得分:0)
这听起来像是使用参考单元的完美理由 - 就像这样
let fig = ref None
let checkInput =
drawArea.MouseClick.Add(fun args ->
if args.Button = MouseButtons.Left then
fig := Some(new figure { what = 0; position = new Point(args.X, args.Y); size = new Point(50, 50) }))
然后您可以使用
检查参考单元格的值match !fig with
|Some(t) -> //do something
|None -> //mouse hasn't been clicked