我在将F#Charting与Winforms结合时遇到了一些麻烦。
我最初在表格中显示的图表很好,但是当基础数据根据GUI交互发生变化时,我无法让它“更新”。
recalcb.MouseClick
|> Event.add (fun evArgs ->
let chart1 = DataUpdate 1 |> Chart.BoxPlotFromData
let chart2 = DataUpdate 2 |> Chart.BoxPlotFromData
let urControl = new ChartControl(chart1, Dock=DockStyle.Fill, AutoSize=true)
let lrControl = new ChartControl(chart2, Dock=DockStyle.Fill, AutoSize=true)
urpanel.Controls.Add(urControl)
lrpanel.Controls.Add(lrControl)
printfn "tried to update"
)
数据正确更新(即chart1和chart2显示其更新值),但图表未以实际形式更新。
我尝试使用初始数据在事件外部定义控件并在事件中调用Refresh()但它没有帮助。
这是一个显示问题的最小示例(理想情况下,图表会在按下每个按钮时更新):
[<EntryPoint>]
[<STAThread>]
let main args =
let form = new Form(Visible = true, Width = 1310, Height = 730,FormBorderStyle=FormBorderStyle.FixedSingle,MaximizeBox = false)
let recalcb = new Button(AutoSize=true,Text="Recalculate")
form.Controls.Add(recalcb)
recalcb.MouseClick
|> Event.add (fun evArgs -> let nm = System.Random().Next(100)
let urControl = new ChartControl(Chart.Point[1 .. nm], Dock=DockStyle.Fill, AutoSize=true)
form.Controls.Add(urControl)
urControl.Refresh()
printfn "%A" nm
)
do Application.Run(form) |> ignore
0
使图表成为另一个控件(即Panel)的子项,并在读取之前在父项上调用Clear()将使其生效。