FSharp图表和Winforms

时间:2014-10-08 02:47:39

标签: winforms charts f#

我在将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()将使其生效。

0 个答案:

没有答案