我在F#中创建了以下代码:
open System.Drawing
open System.Windows.Forms
let form = new Form(Text="project", TopMost=true, Width=400, Height=400)
let defaultSize = new Size(20,20)
let buttonPos text x y = new Button(Text=text, Top=x, Left=y, Size=defaultSize, BackColor=Color.Aqua)
let gameButtons = [for y in 1..9 do for x in 1..9 -> (buttonPos "X" (x*10) (y*10))]
form.Controls.AddRange (List.toArray(gameButtons))
我遇到了错误:
错误1 类型不匹配。期望控件列表但是给出了按钮列表。类型“Control”与类型“Button”不匹配。
我也尝试将gameButtons创建为数组:let gameButtons = [|for y in 1..9 do for x in 1..9 -> (buttonPos "X" (x*10) (y*10))|]
form.Controls.AddRange gameButtons
但是这导致了错误:错误1 类型不匹配。期望控件[],但给定按钮[] 类型“Control”与类型“Button”不匹配
如果我有一个名为gameButtons的列表,并写form.Controls.AddRange [| gameButtons.Head |]
它可以工作(但当然只有一个按钮)。
所以我的问题是,为什么我不能像这样添加控件?如何将所有按钮添加到范围内?
buttonPos
的定义改为= (new Button (...)) :> Control
。问题在于F#没有隐式转换。 - Random Dev